diff options
Diffstat (limited to 'doc')
131 files changed, 24509 insertions, 232 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am index d867bfd..db246ae 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -55,6 +55,7 @@ gdoc_MANS += man/asn1_get_length_der.3 gdoc_MANS += man/asn1_get_tag_der.3 gdoc_MANS += man/asn1_get_length_ber.3 gdoc_MANS += man/asn1_get_octet_der.3 +gdoc_MANS += man/asn1_get_object_id_der.3 gdoc_MANS += man/asn1_get_bit_der.3 gdoc_MANS += man/asn1_der_decoding2.3 gdoc_MANS += man/asn1_der_decoding.3 @@ -63,6 +64,7 @@ gdoc_MANS += man/asn1_der_decoding_startEnd.3 gdoc_MANS += man/asn1_expand_any_defined_by.3 gdoc_MANS += man/asn1_expand_octet_string.3 gdoc_MANS += man/asn1_decode_simple_der.3 +gdoc_MANS += man/asn1_decode_simple_ber.3 gdoc_MANS += man/asn1_perror.3 gdoc_MANS += man/asn1_strerror.3 gdoc_MANS += man/asn1_find_node.3 @@ -103,6 +105,7 @@ gdoc_TEXINFOS += texi/asn1_get_length_der.texi gdoc_TEXINFOS += texi/asn1_get_tag_der.texi gdoc_TEXINFOS += texi/asn1_get_length_ber.texi gdoc_TEXINFOS += texi/asn1_get_octet_der.texi +gdoc_TEXINFOS += texi/asn1_get_object_id_der.texi gdoc_TEXINFOS += texi/asn1_get_bit_der.texi gdoc_TEXINFOS += texi/asn1_der_decoding2.texi gdoc_TEXINFOS += texi/asn1_der_decoding.texi @@ -111,6 +114,7 @@ gdoc_TEXINFOS += texi/asn1_der_decoding_startEnd.texi gdoc_TEXINFOS += texi/asn1_expand_any_defined_by.texi gdoc_TEXINFOS += texi/asn1_expand_octet_string.texi gdoc_TEXINFOS += texi/asn1_decode_simple_der.texi +gdoc_TEXINFOS += texi/asn1_decode_simple_ber.texi gdoc_TEXINFOS += texi/asn1_perror.texi gdoc_TEXINFOS += texi/asn1_strerror.texi gdoc_TEXINFOS += texi/asn1_find_node.texi @@ -178,7 +182,7 @@ stamp_docs: -sourceversion $(VERSION) \ -include libtasn1.h \ -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2006-2013 Free Software Foundation, Inc." \ + -copyright "2006-2015 Free Software Foundation, Inc." \ -function $$i \ $(GDOC_SRC) > man/$$i.3 && \ $(srcdir)/gdoc -texinfo -function $$i \ diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..a4cbb20 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,1774 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is part of LIBTASN1. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@ENABLE_GTK_DOC_TRUE@am__append_1 = reference +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/lib/glm4/gnulib-comp.m4 \ + $(top_srcdir)/lib/glm4/ld-version-script.m4 \ + $(top_srcdir)/lib/glm4/minmax.m4 \ + $(top_srcdir)/lib/glm4/string_h.m4 \ + $(top_srcdir)/lib/glm4/strverscmp.m4 \ + $(top_srcdir)/lib/glm4/visibility.m4 \ + $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/absolute-header.m4 \ + $(top_srcdir)/gl/m4/autobuild.m4 \ + $(top_srcdir)/gl/m4/clock_time.m4 \ + $(top_srcdir)/gl/m4/errno_h.m4 \ + $(top_srcdir)/gl/m4/extensions.m4 \ + $(top_srcdir)/gl/m4/extern-inline.m4 \ + $(top_srcdir)/gl/m4/fseeko.m4 $(top_srcdir)/gl/m4/fstat.m4 \ + $(top_srcdir)/gl/m4/ftell.m4 $(top_srcdir)/gl/m4/ftello.m4 \ + $(top_srcdir)/gl/m4/getopt.m4 $(top_srcdir)/gl/m4/gettime.m4 \ + $(top_srcdir)/gl/m4/gettimeofday.m4 \ + $(top_srcdir)/gl/m4/gnulib-common.m4 \ + $(top_srcdir)/gl/m4/gnulib-comp.m4 \ + $(top_srcdir)/gl/m4/include_next.m4 \ + $(top_srcdir)/gl/m4/largefile.m4 \ + $(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/lseek.m4 \ + $(top_srcdir)/gl/m4/malloc.m4 \ + $(top_srcdir)/gl/m4/manywarnings.m4 \ + $(top_srcdir)/gl/m4/msvc-inval.m4 \ + $(top_srcdir)/gl/m4/msvc-nothrow.m4 \ + $(top_srcdir)/gl/m4/multiarch.m4 \ + $(top_srcdir)/gl/m4/nocrash.m4 $(top_srcdir)/gl/m4/off_t.m4 \ + $(top_srcdir)/gl/m4/read-file.m4 \ + $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/ssize_t.m4 \ + $(top_srcdir)/gl/m4/stdarg.m4 $(top_srcdir)/gl/m4/stddef_h.m4 \ + $(top_srcdir)/gl/m4/stdint.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \ + $(top_srcdir)/gl/m4/stdlib_h.m4 \ + $(top_srcdir)/gl/m4/sys_socket_h.m4 \ + $(top_srcdir)/gl/m4/sys_stat_h.m4 \ + $(top_srcdir)/gl/m4/sys_time_h.m4 \ + $(top_srcdir)/gl/m4/sys_types_h.m4 \ + $(top_srcdir)/gl/m4/time_h.m4 $(top_srcdir)/gl/m4/timespec.m4 \ + $(top_srcdir)/gl/m4/unistd_h.m4 \ + $(top_srcdir)/gl/m4/valgrind-tests.m4 \ + $(top_srcdir)/gl/m4/version-etc.m4 \ + $(top_srcdir)/gl/m4/warn-on-use.m4 \ + $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/gl/m4/wchar_t.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/pkg.m4 \ + $(top_srcdir)/m4/update-header-version.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ + $(srcdir)/stamp-vti $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) +am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) +am__v_DVIPS_0 = @echo " DVIPS " $@; +am__v_DVIPS_1 = +AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) +am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) +am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; +am__v_MAKEINFO_1 = +AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) +am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) +am__v_INFOHTML_0 = @echo " INFOHTML" $@; +am__v_INFOHTML_1 = +AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) +am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) +am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; +am__v_TEXI2DVI_1 = +AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) +am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) +am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; +am__v_TEXI2PDF_1 = +AM_V_texinfo = $(am__v_texinfo_@AM_V@) +am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) +am__v_texinfo_0 = -q +am__v_texinfo_1 = +AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) +am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) +am__v_texidevnull_0 = > /dev/null +am__v_texidevnull_1 = +INFO_DEPS = $(srcdir)/libtasn1.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = libtasn1.dvi +PDFS = libtasn1.pdf +PSS = libtasn1.ps +HTMLS = libtasn1.html +TEXINFOS = libtasn1.texi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +DVIPS = dvips +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(man3dir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +man3dir = $(mandir)/man3 +NROFF = nroff +MANS = $(dist_man_MANS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = cyclo reference +am__DIST_COMMON = $(dist_man_MANS) $(libtasn1_TEXINFOS) \ + $(srcdir)/Makefile.in $(top_srcdir)/build-aux/mdate-sh \ + $(top_srcdir)/build-aux/texinfo.tex TODO +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HTML_DIR = @HTML_DIR@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_REVISION = @LT_REVISION@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PMCCABE = @PMCCABE@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +VALGRIND = @VALGRIND@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lgl_LIBOBJS = @lgl_LIBOBJS@ +lgl_LTLIBOBJS = @lgl_LTLIBOBJS@ +lgltests_LIBOBJS = @lgltests_LIBOBJS@ +lgltests_LTLIBOBJS = @lgltests_LTLIBOBJS@ +lgltests_WITNESS = @lgltests_WITNESS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = cyclo $(am__append_1) +EXTRA_DIST = gdoc TODO libtasn1.html libtasn1.ps libtasn1.pdf stamp_docs +info_TEXINFOS = libtasn1.texi +libtasn1_TEXINFOS = fdl-1.3.texi texinfo.css $(gdoc_TEXINFOS) +AM_MAKEINFOFLAGS = -I $(top_builddir)/doc +TEXI2DVI = texi2dvi $(AM_MAKEINFOFLAGS) +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) \ + --no-split --number-sections --css-include=texinfo.css + +dist_man_MANS = $(gdoc_MANS) asn1Parser.1 asn1Coding.1 asn1Decoding.1 +HELP2MAN_OPTS = --info-page libtasn1 +gdoc_MANS = man/asn1_get_length_der.3 man/asn1_get_tag_der.3 \ + man/asn1_get_length_ber.3 man/asn1_get_octet_der.3 \ + man/asn1_get_object_id_der.3 man/asn1_get_bit_der.3 \ + man/asn1_der_decoding2.3 man/asn1_der_decoding.3 \ + man/asn1_der_decoding_element.3 \ + man/asn1_der_decoding_startEnd.3 \ + man/asn1_expand_any_defined_by.3 \ + man/asn1_expand_octet_string.3 man/asn1_decode_simple_der.3 \ + man/asn1_decode_simple_ber.3 man/asn1_perror.3 \ + man/asn1_strerror.3 man/asn1_find_node.3 man/asn1_length_der.3 \ + man/asn1_octet_der.3 man/asn1_encode_simple_der.3 \ + man/asn1_bit_der.3 man/asn1_der_coding.3 \ + man/asn1_write_value.3 man/asn1_read_value.3 \ + man/asn1_read_value_type.3 man/asn1_read_tag.3 \ + man/asn1_read_node_value.3 man/asn1_array2tree.3 \ + man/asn1_delete_structure.3 man/asn1_delete_structure2.3 \ + man/asn1_delete_element.3 man/asn1_create_element.3 \ + man/asn1_print_structure.3 man/asn1_number_of_elements.3 \ + man/asn1_find_structure_from_oid.3 man/asn1_copy_node.3 \ + man/asn1_dup_node.3 man/asn1_parser2tree.3 \ + man/asn1_parser2array.3 man/asn1_check_version.3 +gdoc_TEXINFOS = texi/decoding.c.texi texi/errors.c.texi \ + texi/parser_aux.c.texi texi/coding.c.texi texi/element.c.texi \ + texi/gstr.c.texi texi/structure.c.texi texi/ASN1.c.texi \ + texi/version.c.texi texi/asn1_get_length_der.texi \ + texi/asn1_get_tag_der.texi texi/asn1_get_length_ber.texi \ + texi/asn1_get_octet_der.texi texi/asn1_get_object_id_der.texi \ + texi/asn1_get_bit_der.texi texi/asn1_der_decoding2.texi \ + texi/asn1_der_decoding.texi \ + texi/asn1_der_decoding_element.texi \ + texi/asn1_der_decoding_startEnd.texi \ + texi/asn1_expand_any_defined_by.texi \ + texi/asn1_expand_octet_string.texi \ + texi/asn1_decode_simple_der.texi \ + texi/asn1_decode_simple_ber.texi texi/asn1_perror.texi \ + texi/asn1_strerror.texi texi/asn1_find_node.texi \ + texi/asn1_length_der.texi texi/asn1_octet_der.texi \ + texi/asn1_encode_simple_der.texi texi/asn1_bit_der.texi \ + texi/asn1_der_coding.texi texi/asn1_write_value.texi \ + texi/asn1_read_value.texi texi/asn1_read_value_type.texi \ + texi/asn1_read_tag.texi texi/asn1_read_node_value.texi \ + texi/asn1_array2tree.texi texi/asn1_delete_structure.texi \ + texi/asn1_delete_structure2.texi texi/asn1_delete_element.texi \ + texi/asn1_create_element.texi texi/asn1_print_structure.texi \ + texi/asn1_number_of_elements.texi \ + texi/asn1_find_structure_from_oid.texi \ + texi/asn1_copy_node.texi texi/asn1_dup_node.texi \ + texi/asn1_parser2tree.texi texi/asn1_parser2array.texi \ + texi/asn1_check_version.texi +GDOC_SRC = $(top_srcdir)/lib/decoding.c $(top_srcdir)/lib/errors.c \ + $(top_srcdir)/lib/parser_aux.c $(top_srcdir)/lib/coding.c \ + $(top_srcdir)/lib/element.c $(top_srcdir)/lib/gstr.c \ + $(top_srcdir)/lib/structure.c $(top_srcdir)/lib/ASN1.c \ + $(top_srcdir)/lib/version.c + +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .dvi .html .info .pdf .ps .texi +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +.texi.info: + $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texi.dvi: + $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.pdf: + $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.html: + $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) + $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ + rm -rf $(@:.html=.htp); exit 1; \ + fi +$(srcdir)/libtasn1.info: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) +libtasn1.dvi: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) +libtasn1.pdf: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) +libtasn1.html: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: libtasn1.texi $(top_srcdir)/configure + @(dir=.; test -f ./libtasn1.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/libtasn1.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ + (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi" && \ + cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ + mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ + rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp* $(srcdir)/version.texi.tmp* + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +.dvi.ps: + $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) $(AM_V_texinfo) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf libtasn1.t2d libtasn1.t2p + +clean-aminfo: + -test -z "libtasn1.dvi libtasn1.pdf libtasn1.ps libtasn1.html" \ + || rm -rf libtasn1.dvi libtasn1.pdf libtasn1.ps libtasn1.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-man3: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man3dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.3[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ + done; } + +uninstall-man3: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man3dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.3[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-recursive +all-am: Makefile $(INFO_DEPS) $(MANS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-aminfo clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: $(DVIS) + +html: html-recursive + +html-am: $(HTMLS) + +info: info-recursive + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am install-man + +install-dvi: install-dvi-recursive + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-recursive + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + d2=$$d$$p; \ + if test -d "$$d2"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d2"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-recursive + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ + fi; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: install-man1 install-man3 + +install-pdf: install-pdf-recursive + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-recursive + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool mostlyclean-vti + +pdf: pdf-recursive + +pdf-am: $(PDFS) + +ps: ps-recursive + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-pdf-am uninstall-ps-am + +uninstall-man: uninstall-man1 uninstall-man3 + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-aminfo clean-generic clean-libtool \ + clean-local cscopelist-am ctags ctags-am dist-info distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-man3 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ + pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-man1 uninstall-man3 uninstall-pdf-am \ + uninstall-ps-am + +.PRECIOUS: Makefile + + +asn1Parser.1: $(top_srcdir)/src/asn1Parser.c $(top_srcdir)/configure.ac + $(HELP2MAN) $(HELP2MAN_OPTS) \ + --name="ASN.1 syntax tree generator for libtasn1" \ + --output=$@ $(top_builddir)/src/asn1Parser$(EXEEXT) + +asn1Coding.1: $(top_srcdir)/src/asn1Coding.c $(top_srcdir)/configure.ac + $(HELP2MAN) $(HELP2MAN_OPTS) \ + --name="ASN.1 DER encoder" \ + --output=$@ $(top_builddir)/src/asn1Coding$(EXEEXT) + +asn1Decoding.1: $(top_srcdir)/src/asn1Decoding.c $(top_srcdir)/configure.ac + $(HELP2MAN) $(HELP2MAN_OPTS) \ + --name="ASN.1 DER decoder" \ + --output=$@ $(top_builddir)/src/asn1Decoding$(EXEEXT) + +compare-makefile: + @MANS=""; \ + TEXINFOS=""; \ + for i in $(GDOC_SRC); do \ + BASE=`basename $$i`; \ + TEXINFOS="$$TEXINFOS\ngdoc_TEXINFOS += texi/$$BASE.texi"; \ + done; \ + FUNCS=`$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; \ + for i in $$FUNCS; do \ + MANS="$$MANS\ngdoc_MANS += man/$$i.3"; \ + TEXINFOS="$$TEXINFOS\ngdoc_TEXINFOS += texi/$$i.texi"; \ + done; \ + grep -v -e '^gdoc_MANS += ' -e '^gdoc_TEXINFOS += ' Makefile.am | \ + perl -p -e "s,^gdoc_MANS =,gdoc_MANS =$$MANS,;" | \ + perl -p -e "s,^gdoc_TEXINFOS =,gdoc_TEXINFOS =$$TEXINFOS,;" \ + > tmp-$@; + diff -u $(srcdir)/Makefile.am tmp-$@ + rm -f tmp-$@ + +$(gdoc_MANS) $(gdoc_TEXINFOS): stamp_docs + +clean-local: + -rm -f stamp_docs + +stamp_docs: + $(mkdir_p) man texi; \ + for i in `$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; do \ + echo -n "Creating documentation for $$i... " && \ + $(srcdir)/gdoc -man \ + -module $(PACKAGE) \ + -pkg-name "$(PACKAGE_NAME)" \ + -sourceversion $(VERSION) \ + -include libtasn1.h \ + -seeinfo $(PACKAGE) -verbatimcopying \ + -copyright "2006-2015 Free Software Foundation, Inc." \ + -function $$i \ + $(GDOC_SRC) > man/$$i.3 && \ + $(srcdir)/gdoc -texinfo -function $$i \ + $(GDOC_SRC) > texi/$$i.texi && \ + echo "ok"; \ + done; \ + for i in $(GDOC_SRC); do \ + BASE=`basename $$i`; \ + echo -n "Creating documentation for $$i... " && \ + $(srcdir)/gdoc -texinfo $$i > texi/$$BASE.texi && \ + echo "ok"; \ + done + touch $@ + +.PHONY: compare-makefile + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: @@ -4,9 +4,13 @@ in order to avoid having people working on the same thing. Current list: + Audit the code -+ Eliminate the need for ltostr() and its reverse -+ Make asn1_der_decoding_element() an alias of asn1_der_decoding() -+ C structure generation instead of a single array +* Avoid the usage of any global state in array2tree or parser2tree + functions. +* Allow extracting the time in a reasonable format (e.g. time_t) +* C structure generation instead of a single array +* CHOICE in CHOICE (e.g., RDN in byName in ResponderID in OCSP) cannot + be read directly. Also the OCTET string (ByKey) in the same choice + is not encoded properly. - Add the checking of default value (e.g. 'INTEGER DEFAULT v1') - Check _asn1_objectid_der, crashes on "0" input, gives incorrect encoding? diff --git a/doc/announce.txt b/doc/announce.txt deleted file mode 100644 index 1b1afaa..0000000 --- a/doc/announce.txt +++ /dev/null @@ -1,96 +0,0 @@ -To: help-libtasn1@gnu.org, info-gnu@gnu.org -Subject: GNU Libtasn1 2.12 released -<#part sign=pgpmime> -GNU Libtasn1 is a standalone library written in C for manipulating ASN.1 -objects including DER/BER encoding/decoding. GNU Libtasn1 is used by -GnuTLS to handle X.509 structures and by GNU Shishi to handle Kerberos -V5 structures. - -* Noteworthy changes in release 2.12 (2012-03-19) [stable] -- Cleanup license headers. -- build: Update gnulib files. -- Corrected DER decoding issue (reported by Matthew Hall). - Added self check to detect the problem, see tests/Test_overflow.c. - This problem can lead to at least remotely triggered crashes, see - further analysis on the libtasn1 mailing list. - -Homepage: - https://www.gnu.org/software/libtasn1/ - -Here are the compressed sources (1.9MB): - ftp://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12.tar.gz - http://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12.tar.gz - -Here are GPG detached signatures using key 0xB565716F: - ftp://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12.tar.gz.sig - http://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12.tar.gz.sig - -We publish Windows binaries for this release (32 and 64 bits): - ftp://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12-win32.zip - http://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12-win32.zip - ftp://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12-win64.zip - http://ftp.gnu.org/gnu/libtasn1/libtasn1-2.12-win64.zip - -Commercial support contracts for Libtasn1 are available, and they help -finance continued maintenance. Simon Josefsson Datakonsult AB, a -Stockholm based privately held company, is currently funding Libtasn1 -maintenance. We are always looking for interesting development -projects. See http://josefsson.org/ for more details. - -If you need help to use Libtasn1, or want to help others, you are -invited to join the help-libtasn1 mailing list, see: - https://lists.gnu.org/mailman/listinfo/help-libtasn1 - -All manuals are available from: - https://www.gnu.org/software/libtasn1/manual/ - -Direct links to the manual: - HTML: https://www.gnu.org/software/libtasn1/manual/libtasn1.html - PDF: https://www.gnu.org/software/libtasn1/manual/libtasn1.pdf - -Direct links to the API Reference manual: - HTML: https://www.gnu.org/software/libtasn1/reference/ - PDF: https://www.gnu.org/software/libtasn1/reference/libtasn1.pdf - -For developers interested in improving code quality, we publish -Cyclomatic code complexity charts that help you find code that may -need review and improvements: - https://www.gnu.org/software/libtasn1/cyclo/ - -Code coverage charts indicate parts of the source code that needs -to be tested better by the included self-tests: - https://www.gnu.org/software/libtasn1/coverage/ - -Clang can analyse the source code for common problems, here is its -report for libtasn1: - https://www.gnu.org/software/libtasn1/clang/ - -The software is cryptographically signed by the author using an -OpenPGP key identified by the following information: - -pub 1280R/B565716F 2002-05-05 [expires: 2013-05-10] - Key fingerprint = 0424 D4EE 81A0 E3D1 19C6 F835 EDA2 1E94 B565 716F -uid Simon Josefsson <simon@josefsson.org> -uid Simon Josefsson <simon@yubico.com> -sub 1280R/4D5D40AE 2002-05-05 [expires: 2013-05-10] -sub 2048R/105E722E 2012-03-13 [expires: 2013-07-26] -sub 2048R/728AB82C 2012-03-13 [expires: 2013-07-26] -sub 2048R/9394F626 2012-03-13 [expires: 2013-07-26] - -The key is available from: - http://josefsson.org/key.txt - dns:b565716f.josefsson.org?TYPE=CERT - -Here are the SHA-1 and SHA-224 checksums: - -b73539aee5444efb5e606b94bdf3ec5bfedb8620 libtasn1-2.12.tar.gz -011e8ab84d57b441f0c1dc18eebdda2ce3960bc9b7fdf8e1d4e35085 libtasn1-2.12.tar.gz - -919933732983e5075a2df288c1a3eb413e8c86c5 libtasn1-2.12-win32.zip -29b40469ae38ba7ff71abde5b806c8d30a222723443386eff4923c57 libtasn1-2.12-win32.zip - -de3add4d82aef98b7e52fff1ae72c1136781363d libtasn1-2.12-win64.zip -6cb1e3171e38e786391cb9dd702e12724f0a19c1cf6c1953a8552e82 libtasn1-2.12-win64.zip - -Happy hacking, -Simon diff --git a/doc/asn1Coding.1 b/doc/asn1Coding.1 new file mode 100644 index 0000000..a3c4f26 --- /dev/null +++ b/doc/asn1Coding.1 @@ -0,0 +1,50 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.1. +.TH ASN1CODING "1" "April 2016" "asn1Coding (libtasn1) 4.8" "User Commands" +.SH NAME +asn1Coding \- ASN.1 DER encoder +.SH SYNOPSIS +.B asn1Coding +[\fI\,OPTION\/\fR] \fI\,DEFINITIONS ASSIGNMENTS\/\fR +.SH DESCRIPTION +Generates a DER encoding of ASN.1 DEFINITIONS file +and ASSIGNMENTS file with value assignments. +.PP +Mandatory arguments to long options are mandatory for short options too. +.TP +\fB\-c\fR, \fB\-\-check\fR +checks the syntax only +.TP +\fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR +output file +.TP +\fB\-h\fR, \fB\-\-help\fR +display this help and exit +.TP +\fB\-v\fR, \fB\-\-version\fR +output version information and exit +.SH AUTHOR +Written by Fabio Fiorina. +.SH "REPORTING BUGS" +Report bugs to: help\-libtasn1@gnu.org +.br +GNU Libtasn1 home page: <http://www.gnu.org/software/libtasn1/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2014 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B asn1Coding +is maintained as a Texinfo manual. If the +.B info +and +.B asn1Coding +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. diff --git a/doc/asn1Decoding.1 b/doc/asn1Decoding.1 new file mode 100644 index 0000000..e3d262f --- /dev/null +++ b/doc/asn1Decoding.1 @@ -0,0 +1,48 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.1. +.TH ASN1DECODING "1" "April 2016" "asn1Decoding (libtasn1) 4.8" "User Commands" +.SH NAME +asn1Decoding \- ASN.1 DER decoder +.SH SYNOPSIS +.B asn1Decoding +[\fI\,OPTION\/\fR] \fI\,DEFINITIONS ENCODED ASN1TYPE\/\fR +.SH DESCRIPTION +Decodes DER data in ENCODED file, for the ASN1TYPE element +described in ASN.1 DEFINITIONS file, and print decoded structures. +.TP +\fB\-b\fR, \fB\-\-benchmark\fR +perform a benchmark on decoding +.TP +\fB\-s\fR, \fB\-\-strict\fR +use strict DER decoding +.TP +\fB\-h\fR, \fB\-\-help\fR +display this help and exit +.TP +\fB\-v\fR, \fB\-\-version\fR +output version information and exit +.SH AUTHOR +Written by Fabio Fiorina. +.SH "REPORTING BUGS" +Report bugs to: help\-libtasn1@gnu.org +.br +GNU Libtasn1 home page: <http://www.gnu.org/software/libtasn1/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2014 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B asn1Decoding +is maintained as a Texinfo manual. If the +.B info +and +.B asn1Decoding +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. diff --git a/doc/asn1Parser.1 b/doc/asn1Parser.1 new file mode 100644 index 0000000..0b69f6a --- /dev/null +++ b/doc/asn1Parser.1 @@ -0,0 +1,53 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.1. +.TH ASN1PARSER "1" "April 2016" "asn1Parser (libtasn1) 4.8" "User Commands" +.SH NAME +asn1Parser \- ASN.1 syntax tree generator for libtasn1 +.SH SYNOPSIS +.B asn1Parser +[\fI\,OPTION\/\fR] \fI\,FILE\/\fR +.SH DESCRIPTION +Read FILE with ASN.1 definitions and generate +a C array that is used with libtasn1 functions. +.PP +Mandatory arguments to long options are mandatory for short options too. +.TP +\fB\-c\fR, \fB\-\-check\fR +checks the syntax only +.TP +\fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR +output file +.TP +\fB\-n\fR, \fB\-\-name\fR=\fI\,NAME\/\fR +array name +.TP +\fB\-h\fR, \fB\-\-help\fR +display this help and exit +.TP +\fB\-v\fR, \fB\-\-version\fR +output version information and exit +.SH AUTHOR +Written by Fabio Fiorina. +.SH "REPORTING BUGS" +Report bugs to: help\-libtasn1@gnu.org +.br +GNU Libtasn1 home page: <http://www.gnu.org/software/libtasn1/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2014 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B asn1Parser +is maintained as a Texinfo manual. If the +.B info +and +.B asn1Parser +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. diff --git a/doc/cyclo/Makefile.in b/doc/cyclo/Makefile.in new file mode 100644 index 0000000..4ff6c67 --- /dev/null +++ b/doc/cyclo/Makefile.in @@ -0,0 +1,1043 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is part of LIBTASN1. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc/cyclo +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/lib/glm4/gnulib-comp.m4 \ + $(top_srcdir)/lib/glm4/ld-version-script.m4 \ + $(top_srcdir)/lib/glm4/minmax.m4 \ + $(top_srcdir)/lib/glm4/string_h.m4 \ + $(top_srcdir)/lib/glm4/strverscmp.m4 \ + $(top_srcdir)/lib/glm4/visibility.m4 \ + $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/absolute-header.m4 \ + $(top_srcdir)/gl/m4/autobuild.m4 \ + $(top_srcdir)/gl/m4/clock_time.m4 \ + $(top_srcdir)/gl/m4/errno_h.m4 \ + $(top_srcdir)/gl/m4/extensions.m4 \ + $(top_srcdir)/gl/m4/extern-inline.m4 \ + $(top_srcdir)/gl/m4/fseeko.m4 $(top_srcdir)/gl/m4/fstat.m4 \ + $(top_srcdir)/gl/m4/ftell.m4 $(top_srcdir)/gl/m4/ftello.m4 \ + $(top_srcdir)/gl/m4/getopt.m4 $(top_srcdir)/gl/m4/gettime.m4 \ + $(top_srcdir)/gl/m4/gettimeofday.m4 \ + $(top_srcdir)/gl/m4/gnulib-common.m4 \ + $(top_srcdir)/gl/m4/gnulib-comp.m4 \ + $(top_srcdir)/gl/m4/include_next.m4 \ + $(top_srcdir)/gl/m4/largefile.m4 \ + $(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/lseek.m4 \ + $(top_srcdir)/gl/m4/malloc.m4 \ + $(top_srcdir)/gl/m4/manywarnings.m4 \ + $(top_srcdir)/gl/m4/msvc-inval.m4 \ + $(top_srcdir)/gl/m4/msvc-nothrow.m4 \ + $(top_srcdir)/gl/m4/multiarch.m4 \ + $(top_srcdir)/gl/m4/nocrash.m4 $(top_srcdir)/gl/m4/off_t.m4 \ + $(top_srcdir)/gl/m4/read-file.m4 \ + $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/ssize_t.m4 \ + $(top_srcdir)/gl/m4/stdarg.m4 $(top_srcdir)/gl/m4/stddef_h.m4 \ + $(top_srcdir)/gl/m4/stdint.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \ + $(top_srcdir)/gl/m4/stdlib_h.m4 \ + $(top_srcdir)/gl/m4/sys_socket_h.m4 \ + $(top_srcdir)/gl/m4/sys_stat_h.m4 \ + $(top_srcdir)/gl/m4/sys_time_h.m4 \ + $(top_srcdir)/gl/m4/sys_types_h.m4 \ + $(top_srcdir)/gl/m4/time_h.m4 $(top_srcdir)/gl/m4/timespec.m4 \ + $(top_srcdir)/gl/m4/unistd_h.m4 \ + $(top_srcdir)/gl/m4/valgrind-tests.m4 \ + $(top_srcdir)/gl/m4/version-etc.m4 \ + $(top_srcdir)/gl/m4/warn-on-use.m4 \ + $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/gl/m4/wchar_t.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/pkg.m4 \ + $(top_srcdir)/m4/update-header-version.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HTML_DIR = @HTML_DIR@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_REVISION = @LT_REVISION@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PMCCABE = @PMCCABE@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +VALGRIND = @VALGRIND@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lgl_LIBOBJS = @lgl_LIBOBJS@ +lgl_LTLIBOBJS = @lgl_LTLIBOBJS@ +lgltests_LIBOBJS = @lgltests_LIBOBJS@ +lgltests_LTLIBOBJS = @lgltests_LTLIBOBJS@ +lgltests_WITNESS = @lgltests_WITNESS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = cyclo-$(PACKAGE).html +vcurl = "http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=lib/%FILENAME%;hb=HEAD" +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/cyclo/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/cyclo/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +cyclo-$(PACKAGE).html: + (cd ${top_srcdir}/lib && \ + $(PMCCABE) *.[ch] \ + | sort -nr \ + | LANG=C $(AWK) -f ${abs_top_srcdir}/build-aux/pmccabe2html \ + -v lang=html -v name="$(PACKAGE_STRING)" \ + -v vcurl=$(vcurl) \ + -v url="http://www.gnu.org/software/$(PACKAGE)/" \ + -v css=${abs_top_srcdir}/build-aux/pmccabe.css) \ + > tmp + mv tmp $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/cyclo/cyclo-libtasn1.html b/doc/cyclo/cyclo-libtasn1.html new file mode 100644 index 0000000..07486b3 --- /dev/null +++ b/doc/cyclo/cyclo-libtasn1.html @@ -0,0 +1,315 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd"> +<html> +<!-- Generated by gnulib's pmccabe2html at 1403805514 --> +<head> +<title>Cyclomatic Complexity report for GNU Libtasn1 4.0</title> + +<meta name="description" content="Cyclomatic Complexity report for GNU Libtasn1 4.0"> +<meta name="keywords" content="Cyclomatic Complexity report for GNU Libtasn1 4.0"> +<meta name="resource-type" content="document"> +<meta name="distribution" content="global"> +<meta name="Generator" content="pmccabe2html"> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<script language="javascript" type="text/javascript"> +function show_hide(idCapa, idButton, fuerzaVisibilidad){ var button = document.getElementById(idButton); var capa = document.getElementById(idCapa); if (capa) { if (fuerzaVisibilidad && fuerzaVisibilidad!="") { if (fuerzaVisibilidad=="visible") capa.style.display=""; else capa.style.display="none"; } else { if (capa.style.display == "none") { capa.style.display = ""; button.innerHTML = "↑"; } else { capa.style.display = "none"; button.innerHTML = "↓"; } } }} +</script> +<style type ="text/css" media="screen"> +<!-- +body { + font-family: Helvetica, sans-serif; +} + +.page_title { + font: 18pt Georgia, serif; + color: darkred; +} + +.section_title { + font: 14pt Georgia, serif; + color: darkred; +} + +.report_timestamp { + color: darkred; + font-weight: bold; +} + +.function_src { + text-align: left; + background: white; +} + +.resume_table { +} + +.resume_header_entry { + color: black; +} + +.resume_number_entry { + color: darkred; + font-weight: bold; + text-align: right; +} + +.ranges_table { + border-spacing: 0px; + border-bottom: solid 2px black; + border-top: solid 2px black; + border-left: solid 2px black; + border-right: solid 2px black; +} + +.ranges_header_entry { + padding: 5px; + border-bottom: solid 1px black; + font-size: 1em; + font-weight: bold; + color: darkred; + text-align: left; +} + +.ranges_entry { +} + +.ranges_entry_simple { + background: #87ff75; +} + +.ranges_entry_moderate { + background: #fffc60; +} + +.ranges_entry_high { + background: #ff5a5d; +} + +.ranges_entry_untestable { + background: #993300 +} + + +.function_table { + border-spacing: 0px; + border-bottom: solid 2px black; + border-top: solid 2px black; + border-left: solid 2px black; + border-right: solid 2px black; +} + +.function_table_caption { + font-size: 1.1em; + font-weight: bold; + color: black; + padding: 5px; +} + +.function_table_header { +} + + +.function_table_header_entry { + padding: 5px; + border-bottom: solid 1px black; + font-size: 1em; + font-weight: bold; + color: darkred; + text-align: left; +} + +.function_entry { +} + + +.function_entry_simple { + background: #87ff75; +} + +.function_entry_moderate { + background: #fffc60; +} + +.function_entry_high { + background: #ff5a5d; +} + +.function_entry_untestable { + background: #993300 +} + + +.function_entry_name { + font-size: 1em; + text-align: left; + font-weight: bold; + text-valign: top; + + border-top: solid 1px black; + padding: 3px; +} + +.function_entry_cyclo { + font-size: 1em; + text-align: right; + text-valign: top; + + border-top: solid 1px black; + padding: 3px; +} + +.function_entry_number { + font-size: 1em; + text-align: right; + text-valign: top; + + border-top: solid 1px black; + padding: 3px; +} + +.function_entry_filename { + font-size: 1em; + text-align: left; + text-valign: top; + + border-top: solid 1px black; + padding: 3px; +} +--> +</style> +</head> +<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> +<a href="http://www.gnu.org/software/libtasn1/">Back to GNU Libtasn1 4.0 Homepage</a><br/><br/> +<div class="page_title">GNU Libtasn1 4.0 Cyclomatic Complexity Report</div> +<p>Report generated at: <span class="report_timestamp">Thu Jun 26 19:58:34 CEST 2014</span></p> +<div class="section_title">Summary</div> +<table class="summary_table"> +<tr> +<td class="summary_header_entry"> +Total number of functions +</td> +<td class="summary_number_entry"> + +</td> +</tr> +<tr> +<td class="summary_header_entry"> +Number of low risk functions +</td> +<td class="summary_number_entry"> + +</td> +</tr> +<tr> +<td class="summary_header_entry"> +Number of moderate risk functions +</td> +<td class="summary_number_entry"> + +</td> +</tr> +<tr> +<td class="summary_header_entry"> +Number of high risk functions +</td> +<td class="summary_number_entry"> + +</td> +</tr> +<tr> +<td class="summary_header_entry"> +Number of untestable functions +</td> +<td class="summary_number_entry"> + +</td> +</tr> +</table> +<br/> +<div class="section_title">Details for all functions</div> +<table class="ranges_table"> +<tr> +<td class="ranges_header_entry"> + +</td> +<td class="ranges_header_entry"> +Cyclomatic Complexity +</td> +<td class="ranges_header_entry"> +Risk Evaluation +</td> +</tr> +<tr> +<td class="ranges_entry_simple"> + +</td> +<td class="ranges_entry"> +0 - 10 +</td> +<td class="ranges_entry"> +Simple module, without much risk +</td> +</tr> +<tr> +<td class="ranges_entry_moderate"> + +</td> +<td class="ranges_entry"> +11 - 20 +</td> +<td class="ranges_entry"> +More complex module, moderate risk +</td> +</tr> +<tr> +<td class="ranges_entry_high"> + +</td> +<td class="ranges_entry"> +21 - 50 +</td> +<td class="ranges_entry"> +Complex module, high risk +</td> +</tr> +<tr> +<td class="ranges_entry_untestable"> + +</td> +<td class="ranges_entry"> +greater than 50 +</td> +<td class="ranges_entry"> +Untestable module, very high risk +</td> +</tr> +</table> +<br/> +<table width="90%" class="function_table" cellpadding="0" cellspacing="0"> +<tr class="function_table_header"> +<td class="function_table_header_entry"> + +</td> +<td class="function_table_header_entry"> +Function Name +</td> +<td class="function_table_header_entry"> +Modified Cyclo +</td> +<td class="function_table_header_entry"> +Number of +<br/> +Statements +</td> +<td class="function_table_header_entry"> +Number of +<br/> +Lines +</td> +<td class="function_table_header_entry"> +Source File +</td> +</tr> +</table> +<hr color="black" size="2"/> Copyright (c) 2007, 2008 Free Software Foundation, Inc. +</body> +</html> diff --git a/doc/gendocs_template b/doc/gendocs_template deleted file mode 100644 index 4418904..0000000 --- a/doc/gendocs_template +++ /dev/null @@ -1,100 +0,0 @@ -<!--#include virtual="/server/header.html" --> -<!-- Parent-Version: 1.77 --> -<title>%%TITLE%% - GNU Project - Free Software Foundation</title> -<!--#include virtual="/server/banner.html" --> -<h2>%%TITLE%%</h2> - -<address>Free Software Foundation</address> -<address>last updated %%DATE%%</address> - -<p>This manual (%%PACKAGE%%) is available in the following formats:</p> - -<ul> -<li><a href="%%PACKAGE%%.html">HTML - (%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li> -<li><a href="html_node/index.html">HTML</a> - with one web page per - node.</li> -%%IF HTML_SECTION%% -<li><a href="html_section/index.html">HTML</a> - with one web page per - section.</li> -%%ENDIF HTML_SECTION%% -%%IF HTML_CHAPTER%% -<li><a href="html_chapter/index.html">HTML</a> - with one web page per - chapter.</li> -%%ENDIF HTML_CHAPTER%% -<li><a href="%%PACKAGE%%.html.gz">HTML compressed - (%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on - one web page.</li> -<li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed - (%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> - - with one web page per node.</li> -%%IF HTML_SECTION%% -<li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed - (%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> - - with one web page per section.</li> -%%ENDIF HTML_SECTION%% -%%IF HTML_CHAPTER%% -<li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed - (%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> - - with one web page per chapter.</li> -%%ENDIF HTML_CHAPTER%% -<li><a href="%%PACKAGE%%.info.tar.gz">Info document - (%%INFO_TGZ_SIZE%%K bytes gzipped tar file)</a>.</li> -<li><a href="%%PACKAGE%%.txt">ASCII text - (%%ASCII_SIZE%%K bytes)</a>.</li> -<li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed - (%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li> -<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file - (%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li> -<li><a href="%%PACKAGE%%.pdf">PDF file - (%%PDF_SIZE%%K bytes)</a>.</li> -<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source - (%%TEXI_TGZ_SIZE%%K bytes gzipped tar file).</a></li> -</ul> - -<p>You can <a href="http://shop.fsf.org/">buy printed copies of -some manuals</a> (among other items) from the Free Software Foundation; -this helps support FSF activities.</p> - -<p>There is also an API reference manual: - -<p> -<ul> - <li><a href="../reference/">HTML Reference API Manual (GTK-DOC)</a>. - <li><a href="../reference/%%PACKAGE%%.pdf">PDF Reference API Manual (GTK-DOC)</a>. - <li><a href="../reference/%%PACKAGE%%.devhelp2">DevHelp Reference API Manual (GTK-DOC)</a>. -</ul> - -<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%% -script</a>.)</p> - -<!-- If needed, change the copyright block at the bottom. In general, - all pages on the GNU web server should have the section about - verbatim copying. Please do NOT remove this without talking - with the webmasters first. - Please make sure the copyright date is consistent with the document - and that it is like this: "2001, 2002", not this: "2001-2002". --> -</div><!-- for id="content", starts in the include above --> -<!--#include virtual="/server/footer.html" --> -<div id="footer"> -<div class="unprintable"> - -<p>Please send general FSF & GNU inquiries to -<a href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. -There are also <a href="/contact/">other ways to contact</a> -the FSF. Broken links and other corrections or suggestions can be sent -to <a href="mailto:%%EMAIL%%"><%%EMAIL%%></a>.</p> -</div> - -<p>Copyright © 2014 Free Software Foundation, Inc.</p> - -<p>This page is licensed under a <a rel="license" -href="http://creativecommons.org/licenses/by-nd/3.0/us/">Creative -Commons Attribution-NoDerivs 3.0 United States License</a>.</p> - -<!--#include virtual="/server/bottom-notes.html" --> - -</div> -</div> -</body> -</html> diff --git a/doc/libtasn1.html b/doc/libtasn1.html new file mode 100644 index 0000000..59d3da9 --- /dev/null +++ b/doc/libtasn1.html @@ -0,0 +1,2347 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<!-- This manual is for GNU Libtasn1 +(version 4.8, 4 April 2016), +which is a library for Abstract Syntax Notation One (ASN.1) and +Distinguished Encoding Rules (DER) manipulation. + +Copyright (C) 2001-2015 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled "GNU Free +Documentation License". --> +<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ --> +<head> +<title>GNU Libtasn1 4.8</title> + +<meta name="description" content="GNU Libtasn1 4.8"> +<meta name="keywords" content="GNU Libtasn1 4.8"> +<meta name="resource-type" content="document"> +<meta name="distribution" content="global"> +<meta name="Generator" content="makeinfo"> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<link href="#Top" rel="start" title="Top"> +<link href="#Concept-Index" rel="index" title="Concept Index"> +<link href="#SEC_Contents" rel="contents" title="Table of Contents"> +<link href="dir.html#Top" rel="up" title="(dir)"> +<style type="text/css"> +<!-- +a.summary-letter {text-decoration: none} +blockquote.indentedblock {margin-right: 0em} +blockquote.smallindentedblock {margin-right: 0em; font-size: smaller} +blockquote.smallquotation {font-size: smaller} +div.display {margin-left: 3.2em} +div.example {margin-left: 3.2em} +div.lisp {margin-left: 3.2em} +div.smalldisplay {margin-left: 3.2em} +div.smallexample {margin-left: 3.2em} +div.smalllisp {margin-left: 3.2em} +kbd {font-style: oblique} +pre.display {font-family: inherit} +pre.format {font-family: inherit} +pre.menu-comment {font-family: serif} +pre.menu-preformatted {font-family: serif} +pre.smalldisplay {font-family: inherit; font-size: smaller} +pre.smallexample {font-size: smaller} +pre.smallformat {font-family: inherit; font-size: smaller} +pre.smalllisp {font-size: smaller} +span.nocodebreak {white-space: nowrap} +span.nolinebreak {white-space: nowrap} +span.roman {font-family: serif; font-weight: normal} +span.sansserif {font-family: sans-serif; font-weight: normal} +ul.no-bullet {list-style: none} +body { + margin: 2%; + padding: 0 5%; + background: #ffffff; +} +h1,h2,h3,h4,h5 { + font-weight: bold; + padding: 5px 5px 5px 5px; + background-color: #c2e0ff; + color: #336699; +} +h1 { + padding: 2em 2em 2em 5%; + color: white; + background: #336699; + text-align: center; + letter-spacing: 3px; +} +h2 { text-decoration: underline; } +pre { + margin: 0 5%; + padding: 0.5em; +} +pre.example { + border: solid 1px; + background: #eeeeff; + padding-bottom: 1em; +} +pre.verbatim { + border: solid 1px gray; + background: white; + padding-bottom: 1em; +} +div.node { + margin: 0 -5% 0 -2%; + padding: 0.5em 0.5em; + margin-top: 0.5em; + margin-bottom: 0.5em; + font-weight: bold; +} +dd, li { + padding-top: 0.1em; + padding-bottom: 0.1em; +} + +--> +</style> + + +</head> + +<body lang="en"> +<h1 class="settitle" align="center">GNU Libtasn1 4.8</h1> + + + + + +<a name="SEC_Contents"></a> +<h2 class="contents-heading">Table of Contents</h2> + +<div class="contents"> + +<ul class="no-bullet"> + <li><a name="toc-Introduction-1" href="#Introduction">1 Introduction</a></li> + <li><a name="toc-ASN_002e1-structure-handling-1" href="#ASN_002e1-structure-handling">2 ASN.1 structure handling</a> + <ul class="no-bullet"> + <li><a name="toc-ASN_002e1-syntax-1" href="#ASN_002e1-syntax">2.1 ASN.1 syntax</a></li> + <li><a name="toc-Naming-1" href="#Naming">2.2 Naming</a></li> + <li><a name="toc-Simple-parsing-1" href="#Simple-parsing">2.3 Simple parsing</a></li> + <li><a name="toc-Library-Notes-1" href="#Library-Notes">2.4 Library Notes</a></li> + <li><a name="toc-Future-developments-1" href="#Future-developments">2.5 Future developments</a></li> + </ul></li> + <li><a name="toc-Utilities-1" href="#Utilities">3 Utilities</a> + <ul class="no-bullet"> + <li><a name="toc-Invoking-asn1Parser-1" href="#Invoking-asn1Parser">3.1 Invoking asn1Parser</a></li> + <li><a name="toc-Invoking-asn1Coding-1" href="#Invoking-asn1Coding">3.2 Invoking asn1Coding</a></li> + <li><a name="toc-Invoking-asn1Decoding-1" href="#Invoking-asn1Decoding">3.3 Invoking asn1Decoding</a></li> + </ul></li> + <li><a name="toc-Function-reference-1" href="#Function-reference">4 Function reference</a> + <ul class="no-bullet"> + <li><a name="toc-ASN_002e1-schema-functions-1" href="#ASN_002e1-schema-functions">4.1 ASN.1 schema functions</a></li> + <li><a name="toc-ASN_002e1-field-functions-1" href="#ASN_002e1-field-functions">4.2 ASN.1 field functions</a></li> + <li><a name="toc-DER-functions-1" href="#DER-functions">4.3 DER functions</a></li> + <li><a name="toc-Error-handling-functions-1" href="#Error-handling-functions">4.4 Error handling functions</a></li> + <li><a name="toc-Auxilliary-functions-1" href="#Auxilliary-functions">4.5 Auxilliary functions</a></li> + </ul></li> + <li><a name="toc-Copying-Information-1" href="#Copying-Information">Appendix A Copying Information</a> + <ul class="no-bullet"> + <li><a name="toc-GNU-Free-Documentation-License-1" href="#GNU-Free-Documentation-License">A.1 GNU Free Documentation License</a></li> + </ul></li> + <li><a name="toc-Concept-Index-1" href="#Concept-Index">Concept Index</a></li> + <li><a name="toc-Function-and-Data-Index-1" href="#Function-and-Data-Index">Function and Data Index</a></li> +</ul> +</div> + + +<a name="Top"></a> +<div class="header"> +<p> +Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Up: <a href="dir.html#Top" accesskey="u" rel="up">(dir)</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Libtasn1"></a> +<h1 class="top">Libtasn1</h1> + +<p>This manual is for GNU Libtasn1 +(version 4.8, 4 April 2016), +which is a library for Abstract Syntax Notation One (ASN.1) and +Distinguished Encoding Rules (DER) manipulation. +</p> +<p>Copyright © 2001-2015 Free Software Foundation, Inc. +</p> +<blockquote> +<p>Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled “GNU Free +Documentation License”. +</p></blockquote> + + +<table class="menu" border="0" cellspacing="0"> +<tr><td align="left" valign="top">• <a href="#Introduction" accesskey="1">Introduction</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#ASN_002e1-structure-handling" accesskey="2">ASN.1 structure handling</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Utilities" accesskey="3">Utilities</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Function-reference" accesskey="4">Function reference</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Copying-Information" accesskey="5">Copying Information</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> +Indices + +</pre></th></tr><tr><td align="left" valign="top">• <a href="#Concept-Index" accesskey="6">Concept Index</a>:</td><td> </td><td align="left" valign="top">Index of concepts and programs. +</td></tr> +<tr><td align="left" valign="top">• <a href="#Function-and-Data-Index" accesskey="7">Function and Data Index</a>:</td><td> </td><td align="left" valign="top">Index of functions, variables and data types. +</td></tr> +</table> + +<hr> +<a name="Introduction"></a> +<div class="header"> +<p> +Next: <a href="#ASN_002e1-structure-handling" accesskey="n" rel="next">ASN.1 structure handling</a>, Previous: <a href="#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Introduction-1"></a> +<h2 class="chapter">1 Introduction</h2> + +<p>This document describes the Libtasn1 library that provides +Abstract Syntax Notation One (ASN.1, as specified by the X.680 ITU-T +recommendation) parsing and structures management, +and Distinguished Encoding Rules (DER, as per X.690) encoding and +decoding functions. +</p> +<p>The main features of this library are: +</p> +<ul> +<li> On-line ASN.1 structure management that doesn’t require any +C code file generation. + +</li><li> Off-line ASN.1 structure management with C code file generation +containing an array. + +</li><li> Distinguished Encoding Rules (DER) encoding support. + +</li><li> No limits for INTEGER and ENUMERATED values. + +</li><li> It’s Free Software. +Anybody can use, modify, and redistribute the library under the terms +of the GNU Lesser General Public License version 2.1 or later. The +command line tools, self-tests and build infrastructure are licensed +under the GNU General Public License version 3.0 or later. + +</li><li> Thread-safety. +<a name="index-threads"></a> +No global variables are used and multiple library handles and session +handles may be used in parallel. + +</li><li> Portability. +<a name="index-Porting"></a> +The code should work on all Unix like operating systems, and Windows. +The library itself should be portable to any C89 system, not even +POSIX is required. +</li></ul> + +<hr> +<a name="ASN_002e1-structure-handling"></a> +<div class="header"> +<p> +Next: <a href="#Utilities" accesskey="n" rel="next">Utilities</a>, Previous: <a href="#Introduction" accesskey="p" rel="prev">Introduction</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="ASN_002e1-structure-handling-1"></a> +<h2 class="chapter">2 ASN.1 structure handling</h2> + +<table class="menu" border="0" cellspacing="0"> +<tr><td align="left" valign="top">• <a href="#ASN_002e1-syntax" accesskey="1">ASN.1 syntax</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Naming" accesskey="2">Naming</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Simple-parsing" accesskey="3">Simple parsing</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Library-Notes" accesskey="4">Library Notes</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Future-developments" accesskey="5">Future developments</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +</table> + +<hr> +<a name="ASN_002e1-syntax"></a> +<div class="header"> +<p> +Next: <a href="#Naming" accesskey="n" rel="next">Naming</a>, Up: <a href="#ASN_002e1-structure-handling" accesskey="u" rel="up">ASN.1 structure handling</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="ASN_002e1-syntax-1"></a> +<h3 class="section">2.1 ASN.1 syntax</h3> + +<a name="index-ASN_002e1-schema"></a> + +<p>The parser is case sensitive. The comments begin with <code>--</code> and +end either with another <code>--</code>, or at the end of the respective +line, whichever comes first. The C-style <code>/*</code>, <code>*/</code> +comments are not supported. +</p> +<p>For an example of the syntax, check the <samp>pkix.asn</samp> file +distributed with the library. +</p> +<p>ASN.1 definitions must follow the syntax below: +</p> +<pre class="verbatim"> definitions_name {<object definition>} + + DEFINITIONS <EXPLICIT or IMPLICIT> TAGS ::= + + BEGIN + + <type and constants definitions> + + END +</pre> +<p>The <code>::=</code> token must be separate from other elements, so the +following declaration is invalid: +</p> +<div class="example"> +<pre class="example"> -- INCORRECT + Version ::=INTEGER +</pre></div> + +<p>The correct form is: +</p> +<div class="example"> +<pre class="example"> Version ::= INTEGER +</pre></div> + +<p>Here is the list of types that the parser can manage: +</p> +<a name="index-Supported-ASN_002e1-types_002c-list-of"></a> + +<ul> +<li> <code>INTEGER</code>; +</li><li> <code>ENUMERATED</code>; +</li><li> <code>BOOLEAN</code>; +</li><li> <code>OBJECT IDENTIFIER</code>; +</li><li> <code>NULL</code>; +</li><li> <code>BIT STRING</code>; +</li><li> <code>OCTET STRING</code>; +</li><li> <code>UTCTime</code>; +</li><li> <code>GeneralizedTime</code>; +</li><li> <code>GeneralString</code>; +</li><li> <code>NumericString</code>; +</li><li> <code>IA5String</code>; +</li><li> <code>TeletexString</code>; +</li><li> <code>PrintableString</code>; +</li><li> <code>UniversalString</code>; +</li><li> <code>BMPString</code>; +</li><li> <code>UTF8String</code>; +</li><li> <code>VisibleString</code>; +</li><li> <code>SEQUENCE</code>; +</li><li> <code>SEQUENCE OF</code>; +</li><li> <code>SET</code>; +</li><li> <code>SET OF</code>; +</li><li> <code>CHOICE</code>; +</li><li> <code>ANY</code>; +</li><li> <code>ANY DEFINED BY</code>. + +</li></ul> + +<p>This version doesn’t handle the <code>REAL</code> type. It doesn’t support +the <code>AUTOMATIC TAGS</code> option, and the <code>EXPORT</code> and +<code>IMPORT</code> sections, either. +</p> +<p>The <code>SIZE</code> constraints are allowed, but no check is done on them. +</p> +<hr> +<a name="Naming"></a> +<div class="header"> +<p> +Next: <a href="#Simple-parsing" accesskey="n" rel="next">Simple parsing</a>, Previous: <a href="#ASN_002e1-syntax" accesskey="p" rel="prev">ASN.1 syntax</a>, Up: <a href="#ASN_002e1-structure-handling" accesskey="u" rel="up">ASN.1 structure handling</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Naming-1"></a> +<h3 class="section">2.2 Naming</h3> + +<p>Consider this definition: +</p> +<pre class="verbatim"> Example { 1 2 3 4 } + + DEFINITIONS EXPLICIT TAGS ::= + + BEGIN + + Group ::= SEQUENCE { + id OBJECT IDENTIFIER, + value Value + } + + Value ::= SEQUENCE { + value1 INTEGER, + value2 BOOLEAN + } + + END +</pre> +<p>The notation to access the ‘<samp>Group</samp>’ type of the ‘<samp>Example</samp>’ +definition above is ‘<samp>Example.Group</samp>’ (as a NUL-terminated string.) +Such strings are used in the functions described below. +</p> +<p>Others examples: +</p> +<ul> +<li> field ‘<samp>id</samp>’ of the ‘<samp>Group</samp>’ type: ‘<samp>Example.Group.id</samp>’; + +</li><li> field ‘<samp>value1</samp>’ of the ‘<samp>value</samp>’ field of the ‘<samp>Group</samp>’ +type: ‘<samp>Example.Group.value.value1</samp>’. + +</li></ul> + +<p>Elements of structured types unnamed by the respective definition +receive the names <code>?1</code>, <code>?2</code>, and so on. +</p> +<p>The <code>?LAST</code> name indicates the last element of a <code>SET OF</code> or +<code>SEQUENCE OF</code>. +</p> +<hr> +<a name="Simple-parsing"></a> +<div class="header"> +<p> +Next: <a href="#Library-Notes" accesskey="n" rel="next">Library Notes</a>, Previous: <a href="#Naming" accesskey="p" rel="prev">Naming</a>, Up: <a href="#ASN_002e1-structure-handling" accesskey="u" rel="up">ASN.1 structure handling</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Simple-parsing-1"></a> +<h3 class="section">2.3 Simple parsing</h3> + +<p>For simple types like <code>OCTET STRING</code> the simple parsing functions listed +below may be used instead. +</p> +<ul> +<li> <a href="#asn1_005fdecode_005fsimple_005fder">asn1_decode_simple_der</a> +</li><li> <a href="#asn1_005fencode_005fsimple_005fder">asn1_encode_simple_der</a> +</li></ul> + +<hr> +<a name="Library-Notes"></a> +<div class="header"> +<p> +Next: <a href="#Future-developments" accesskey="n" rel="next">Future developments</a>, Previous: <a href="#Simple-parsing" accesskey="p" rel="prev">Simple parsing</a>, Up: <a href="#ASN_002e1-structure-handling" accesskey="u" rel="up">ASN.1 structure handling</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Library-Notes-1"></a> +<h3 class="section">2.4 Library Notes</h3> + +<a name="index-Header-file-libtasn1_002eh"></a> + +<p>The header file of this library is <samp>libtasn1.h</samp>. +</p> +<a name="index-Main-type-asn1_005fnode"></a> + +<p>The main type used in it is <code>asn1_node</code>, and it’s used to store +the ASN.1 definitions and structures (instances). +</p> +<p>The <code>NULL</code> constant can be used for the variable +initialization. For example: +</p> +<div class="example"> +<pre class="example"> asn1_node definitions = NULL; +</pre></div> + +<p>Some functions require an <code>errorDescription</code> argument of type +<code>char *</code>, pointing to a pre-allocated buffer of at least +<code>ASN1_MAX_ERROR_DESCRIPTION_SIZE</code> bytes size (e.g., as in +‘<samp>char description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];</samp>’). +</p> +<p><code>ASN1_MAX_NAME_SIZE</code> is the maximum number of characters allowed +for an ASN.1 identifier. +</p> +<hr> +<a name="Future-developments"></a> +<div class="header"> +<p> +Previous: <a href="#Library-Notes" accesskey="p" rel="prev">Library Notes</a>, Up: <a href="#ASN_002e1-structure-handling" accesskey="u" rel="up">ASN.1 structure handling</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Future-developments-1"></a> +<h3 class="section">2.5 Future developments</h3> +<a name="index-Future-developments"></a> + +<ul> +<li> Add functions for a C code file generation containing equivalent +data structures (not a single array like now). + +</li><li> The <code>REAL</code> type. + +</li></ul> + +<hr> +<a name="Utilities"></a> +<div class="header"> +<p> +Next: <a href="#Function-reference" accesskey="n" rel="next">Function reference</a>, Previous: <a href="#ASN_002e1-structure-handling" accesskey="p" rel="prev">ASN.1 structure handling</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Utilities-1"></a> +<h2 class="chapter">3 Utilities</h2> + +<table class="menu" border="0" cellspacing="0"> +<tr><td align="left" valign="top">• <a href="#Invoking-asn1Parser" accesskey="1">Invoking asn1Parser</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Invoking-asn1Coding" accesskey="2">Invoking asn1Coding</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Invoking-asn1Decoding" accesskey="3">Invoking asn1Decoding</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +</table> + +<hr> +<a name="Invoking-asn1Parser"></a> +<div class="header"> +<p> +Next: <a href="#Invoking-asn1Coding" accesskey="n" rel="next">Invoking asn1Coding</a>, Up: <a href="#Utilities" accesskey="u" rel="up">Utilities</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Invoking-asn1Parser-1"></a> +<h3 class="section">3.1 Invoking asn1Parser</h3> +<a name="index-asn1Parser-program"></a> + +<p><code>asn1Parser</code> reads a single file with ASN.1 definitions and +generates a +file with an array to use with libtasn1 functions. +</p> +<pre class="verbatim">Usage: asn1Parser [options] file + +Options: + -h : shows the help message. + -v : shows version information and exit. + -c : checks the syntax only. + -o file : output file. + -n name : array name. +</pre> +<hr> +<a name="Invoking-asn1Coding"></a> +<div class="header"> +<p> +Next: <a href="#Invoking-asn1Decoding" accesskey="n" rel="next">Invoking asn1Decoding</a>, Previous: <a href="#Invoking-asn1Parser" accesskey="p" rel="prev">Invoking asn1Parser</a>, Up: <a href="#Utilities" accesskey="u" rel="up">Utilities</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Invoking-asn1Coding-1"></a> +<h3 class="section">3.2 Invoking asn1Coding</h3> +<a name="index-asn1Coding-program"></a> + +<p><code>asn1Coding</code> generates a DER encoding from a file with ASN.1 +definitions and another one with assignments. +</p> +<p>The file with assignments must have this syntax: +</p> +<pre class="verbatim">InstanceName Asn1Definition + +nameString value + +nameString value +... +</pre> +<p>To specify the field of a <code>CHOICE</code> to be used, specify its name +as a value to the <code>CHOICE</code> element itself. Use <code>''</code> to +denote the root element itself. +(as in the example below.) +</p> +<p>The output file is a binary file with the DER encoding. +</p> +<pre class="verbatim">Usage: asn1Coding [options] file1 file2 + file1 : file with ASN1 definitions. + file2 : file with assignments. +Options: + -h : shows the help message. + -v : shows version information and exit. + -c : checks the syntax only. + -o file : output file. +</pre> +<p>For example, consider an ASN.1 definitions file as follows: +</p> +<pre class="verbatim">MYPKIX1 { } + +DEFINITIONS IMPLICIT TAGS ::= + +BEGIN + +OtherStruct := SEQUENCE { + x INTEGER, + y CHOICE { + y1 INTEGER, + y2 OCTET STRING }, +} + +Dss-Sig-Value ::= SEQUENCE { + r INTEGER, + s INTEGER, + other OtherStruct + z INTEGER OPTIONAL, +} + +END +</pre> +<p>And a assignments file as follows: +</p> +<pre class="verbatim">dp MYPKIX1.Dss-Sig-Value + +r 42 +s 47 +other.x 66 +other.y y1 +other.y.y1 15 +z (NULL) +</pre> +<p>Running the command below will generate a <samp>assign.out</samp> file, +containing the DER encoding of <code>PKIX1.Dss-Sig-Value</code>. +</p> +<pre class="verbatim">$ asn1Coding pkix.asn assign.asn1 +</pre> +<p>If the root element is of the <code>CHOICE</code> type, the assignment file +may be like (using the types defined in <samp>pkix.asn</samp>): +</p><pre class="verbatim">elt PKIX1Implicit88.GeneralName + +'' dNSName +dNSName example.org +</pre> +<hr> +<a name="Invoking-asn1Decoding"></a> +<div class="header"> +<p> +Previous: <a href="#Invoking-asn1Coding" accesskey="p" rel="prev">Invoking asn1Coding</a>, Up: <a href="#Utilities" accesskey="u" rel="up">Utilities</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Invoking-asn1Decoding-1"></a> +<h3 class="section">3.3 Invoking asn1Decoding</h3> +<a name="index-asn1Decoding-program"></a> + +<p><code>asn1Decoding</code> generates an ASN.1 structure from a file with +ASN.1 +definitions and a binary file with a DER encoding. +</p> +<pre class="verbatim">Usage: asn1Decoding [options] file1 file2 type + file1 : file with ASN1 definitions. + file2 : binary file with a DER encoding. + type : ASN1 definition name. +Options: + -h : shows the help message. + -v : shows version information and exit. + -o file : output file. +</pre> +<p>For example, after generating the <samp>assign.out</samp> file from the +example section of the <code>asn1Coding</code> command above, the +following +invocation will decode the DER data. +</p> +<pre class="verbatim">$ asn1Decoding pkix.asn assign.out PKIX1.Dss-Sig-Value +</pre> +<hr> +<a name="Function-reference"></a> +<div class="header"> +<p> +Next: <a href="#Copying-Information" accesskey="n" rel="next">Copying Information</a>, Previous: <a href="#Utilities" accesskey="p" rel="prev">Utilities</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Function-reference-1"></a> +<h2 class="chapter">4 Function reference</h2> + +<table class="menu" border="0" cellspacing="0"> +<tr><td align="left" valign="top">• <a href="#ASN_002e1-schema-functions" accesskey="1">ASN.1 schema functions</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#ASN_002e1-field-functions" accesskey="2">ASN.1 field functions</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#DER-functions" accesskey="3">DER functions</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Error-handling-functions" accesskey="4">Error handling functions</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +<tr><td align="left" valign="top">• <a href="#Auxilliary-functions" accesskey="5">Auxilliary functions</a>:</td><td> </td><td align="left" valign="top"> +</td></tr> +</table> + +<hr> +<a name="ASN_002e1-schema-functions"></a> +<div class="header"> +<p> +Next: <a href="#ASN_002e1-field-functions" accesskey="n" rel="next">ASN.1 field functions</a>, Up: <a href="#Function-reference" accesskey="u" rel="up">Function reference</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="ASN_002e1-schema-functions-1"></a> +<h3 class="section">4.1 ASN.1 schema functions</h3> + +<a name="asn1_005fparser2tree-1"></a> +<h4 class="subheading">asn1_parser2tree</h4> +<a name="asn1_005fparser2tree"></a><dl> +<dt><a name="index-asn1_005fparser2tree"></a>Function: <em>int</em> <strong>asn1_parser2tree</strong> <em>(const char * <var>file</var>, asn1_node * <var>definitions</var>, char * <var>error_desc</var>)</em></dt> +<dd><p><var>file</var>: specify the path and the name of file that contains +ASN.1 declarations. +</p> +<p><var>definitions</var>: return the pointer to the structure created from +"file" ASN.1 declarations. +</p> +<p><var>error_desc</var>: return the error description or an empty +string if success. +</p> +<p>Function used to start the parse algorithm. Creates the structures +needed to manage the definitions included in <code>file</code> file. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if the file has a correct syntax and every +identifier is known, <code>ASN1_ELEMENT_NOT_EMPTY</code> if <code>definitions</code> not +<code>NULL</code> , <code>ASN1_FILE_NOT_FOUND</code> if an error occured while +opening <code>file</code> , <code>ASN1_SYNTAX_ERROR</code> if the syntax is not +correct, <code>ASN1_IDENTIFIER_NOT_FOUND</code> if in the file there is an +identifier that is not defined, <code>ASN1_NAME_TOO_LONG</code> if in the +file there is an identifier whith more than <code>ASN1_MAX_NAME_SIZE</code> +characters. +</p></dd></dl> + +<a name="asn1_005fparser2array-1"></a> +<h4 class="subheading">asn1_parser2array</h4> +<a name="asn1_005fparser2array"></a><dl> +<dt><a name="index-asn1_005fparser2array"></a>Function: <em>int</em> <strong>asn1_parser2array</strong> <em>(const char * <var>inputFileName</var>, const char * <var>outputFileName</var>, const char * <var>vectorName</var>, char * <var>error_desc</var>)</em></dt> +<dd><p><var>inputFileName</var>: specify the path and the name of file that +contains ASN.1 declarations. +</p> +<p><var>outputFileName</var>: specify the path and the name of file that will +contain the C vector definition. +</p> +<p><var>vectorName</var>: specify the name of the C vector. +</p> +<p><var>error_desc</var>: return the error description or an empty +string if success. +</p> +<p>Function that generates a C structure from an ASN1 file. Creates a +file containing a C vector to use to manage the definitions +included in <code>inputFileName</code> file. If <code>inputFileName</code> is +"/aa/bb/xx.yy" and <code>outputFileName</code> is <code>NULL</code> , the file created is +"/aa/bb/xx_asn1_tab.c". If <code>vectorName</code> is <code>NULL</code> the vector name +will be "xx_asn1_tab". +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if the file has a correct syntax and every +identifier is known, <code>ASN1_FILE_NOT_FOUND</code> if an error occured +while opening <code>inputFileName</code> , <code>ASN1_SYNTAX_ERROR</code> if the syntax is +not correct, <code>ASN1_IDENTIFIER_NOT_FOUND</code> if in the file there is +an identifier that is not defined, <code>ASN1_NAME_TOO_LONG</code> if in the +file there is an identifier whith more than <code>ASN1_MAX_NAME_SIZE</code> +characters. +</p></dd></dl> + + +<hr> +<a name="ASN_002e1-field-functions"></a> +<div class="header"> +<p> +Next: <a href="#DER-functions" accesskey="n" rel="next">DER functions</a>, Previous: <a href="#ASN_002e1-schema-functions" accesskey="p" rel="prev">ASN.1 schema functions</a>, Up: <a href="#Function-reference" accesskey="u" rel="up">Function reference</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="ASN_002e1-field-functions-1"></a> +<h3 class="section">4.2 ASN.1 field functions</h3> + +<a name="asn1_005farray2tree-1"></a> +<h4 class="subheading">asn1_array2tree</h4> +<a name="asn1_005farray2tree"></a><dl> +<dt><a name="index-asn1_005farray2tree"></a>Function: <em>int</em> <strong>asn1_array2tree</strong> <em>(const asn1_static_node * <var>array</var>, asn1_node * <var>definitions</var>, char * <var>errorDescription</var>)</em></dt> +<dd><p><var>array</var>: specify the array that contains ASN.1 declarations +</p> +<p><var>definitions</var>: return the pointer to the structure created by +*ARRAY ASN.1 declarations +</p> +<p><var>errorDescription</var>: return the error description. +</p> +<p>Creates the structures needed to manage the ASN.1 definitions. + <code>array</code> is a vector created by <code>asn1_parser2array()</code> . +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if structure was created correctly, +<code>ASN1_ELEMENT_NOT_EMPTY</code> if * <code>definitions</code> not NULL, +<code>ASN1_IDENTIFIER_NOT_FOUND</code> if in the file there is an identifier +that is not defined (see <code>errorDescription</code> for more information), +<code>ASN1_ARRAY_ERROR</code> if the array pointed by <code>array</code> is wrong. +</p></dd></dl> + +<a name="asn1_005fdelete_005fstructure-1"></a> +<h4 class="subheading">asn1_delete_structure</h4> +<a name="asn1_005fdelete_005fstructure"></a><dl> +<dt><a name="index-asn1_005fdelete_005fstructure"></a>Function: <em>int</em> <strong>asn1_delete_structure</strong> <em>(asn1_node * <var>structure</var>)</em></dt> +<dd><p><var>structure</var>: pointer to the structure that you want to delete. +</p> +<p>Deletes the structure * <code>structure</code> . At the end, * <code>structure</code> is set +to NULL. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful, <code>ASN1_ELEMENT_NOT_FOUND</code> if +* <code>structure</code> was NULL. +</p></dd></dl> + +<a name="asn1_005fdelete_005fstructure2-1"></a> +<h4 class="subheading">asn1_delete_structure2</h4> +<a name="asn1_005fdelete_005fstructure2"></a><dl> +<dt><a name="index-asn1_005fdelete_005fstructure2"></a>Function: <em>int</em> <strong>asn1_delete_structure2</strong> <em>(asn1_node * <var>structure</var>, unsigned int <var>flags</var>)</em></dt> +<dd><p><var>structure</var>: pointer to the structure that you want to delete. +</p> +<p><var>flags</var>: additional flags (see <code>ASN1_DELETE_FLAG</code> ) +</p> +<p>Deletes the structure * <code>structure</code> . At the end, * <code>structure</code> is set +to NULL. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful, <code>ASN1_ELEMENT_NOT_FOUND</code> if +* <code>structure</code> was NULL. +</p></dd></dl> + +<a name="asn1_005fdelete_005felement-1"></a> +<h4 class="subheading">asn1_delete_element</h4> +<a name="asn1_005fdelete_005felement"></a><dl> +<dt><a name="index-asn1_005fdelete_005felement"></a>Function: <em>int</em> <strong>asn1_delete_element</strong> <em>(asn1_node <var>structure</var>, const char * <var>element_name</var>)</em></dt> +<dd><p><var>structure</var>: pointer to the structure that contains the element you +want to delete. +</p> +<p><var>element_name</var>: element’s name you want to delete. +</p> +<p>Deletes the element named * <code>element_name</code> inside * <code>structure</code> . +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful, <code>ASN1_ELEMENT_NOT_FOUND</code> if +the <code>element_name</code> was not found. +</p></dd></dl> + +<a name="asn1_005fcreate_005felement-1"></a> +<h4 class="subheading">asn1_create_element</h4> +<a name="asn1_005fcreate_005felement"></a><dl> +<dt><a name="index-asn1_005fcreate_005felement"></a>Function: <em>int</em> <strong>asn1_create_element</strong> <em>(asn1_node <var>definitions</var>, const char * <var>source_name</var>, asn1_node * <var>element</var>)</em></dt> +<dd><p><var>definitions</var>: pointer to the structure returned by "parser_asn1" function +</p> +<p><var>source_name</var>: the name of the type of the new structure (must be +inside p_structure). +</p> +<p><var>element</var>: pointer to the structure created. +</p> +<p>Creates a structure of type <code>source_name</code> . Example using +"pkix.asn": +</p> +<p>rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if creation OK, <code>ASN1_ELEMENT_NOT_FOUND</code> if + <code>source_name</code> is not known. +</p></dd></dl> + +<a name="asn1_005fprint_005fstructure-1"></a> +<h4 class="subheading">asn1_print_structure</h4> +<a name="asn1_005fprint_005fstructure"></a><dl> +<dt><a name="index-asn1_005fprint_005fstructure"></a>Function: <em>void</em> <strong>asn1_print_structure</strong> <em>(FILE * <var>out</var>, asn1_node <var>structure</var>, const char * <var>name</var>, int <var>mode</var>)</em></dt> +<dd><p><var>out</var>: pointer to the output file (e.g. stdout). +</p> +<p><var>structure</var>: pointer to the structure that you want to visit. +</p> +<p><var>name</var>: an element of the structure +</p> +<p><var>mode</var>: specify how much of the structure to print, can be +<code>ASN1_PRINT_NAME</code> , <code>ASN1_PRINT_NAME_TYPE</code> , +<code>ASN1_PRINT_NAME_TYPE_VALUE</code> , or <code>ASN1_PRINT_ALL</code> . +</p> +<p>Prints on the <code>out</code> file descriptor the structure’s tree starting +from the <code>name</code> element inside the structure <code>structure</code> . +</p></dd></dl> + +<a name="asn1_005fnumber_005fof_005felements-1"></a> +<h4 class="subheading">asn1_number_of_elements</h4> +<a name="asn1_005fnumber_005fof_005felements"></a><dl> +<dt><a name="index-asn1_005fnumber_005fof_005felements"></a>Function: <em>int</em> <strong>asn1_number_of_elements</strong> <em>(asn1_node <var>element</var>, const char * <var>name</var>, int * <var>num</var>)</em></dt> +<dd><p><var>element</var>: pointer to the root of an ASN1 structure. +</p> +<p><var>name</var>: the name of a sub-structure of ROOT. +</p> +<p><var>num</var>: pointer to an integer where the result will be stored +</p> +<p>Counts the number of elements of a sub-structure called NAME with +names equal to "?1","?2", ... +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful, <code>ASN1_ELEMENT_NOT_FOUND</code> if + <code>name</code> is not known, <code>ASN1_GENERIC_ERROR</code> if pointer <code>num</code> is <code>NULL</code> . +</p></dd></dl> + +<a name="asn1_005ffind_005fstructure_005ffrom_005foid-1"></a> +<h4 class="subheading">asn1_find_structure_from_oid</h4> +<a name="asn1_005ffind_005fstructure_005ffrom_005foid"></a><dl> +<dt><a name="index-asn1_005ffind_005fstructure_005ffrom_005foid"></a>Function: <em>const char *</em> <strong>asn1_find_structure_from_oid</strong> <em>(asn1_node <var>definitions</var>, const char * <var>oidValue</var>)</em></dt> +<dd><p><var>definitions</var>: ASN1 definitions +</p> +<p><var>oidValue</var>: value of the OID to search (e.g. "1.2.3.4"). +</p> +<p>Search the structure that is defined just after an OID definition. +</p> +<p><strong>Returns:</strong> <code>NULL</code> when <code>oidValue</code> not found, otherwise the pointer to a +constant string that contains the element name defined just after +the OID. +</p></dd></dl> + +<a name="asn1_005fcopy_005fnode-1"></a> +<h4 class="subheading">asn1_copy_node</h4> +<a name="asn1_005fcopy_005fnode"></a><dl> +<dt><a name="index-asn1_005fcopy_005fnode"></a>Function: <em>int</em> <strong>asn1_copy_node</strong> <em>(asn1_node <var>dst</var>, const char * <var>dst_name</var>, asn1_node <var>src</var>, const char * <var>src_name</var>)</em></dt> +<dd><p><var>dst</var>: Destination asn1 node. +</p> +<p><var>dst_name</var>: Field name in destination node. +</p> +<p><var>src</var>: Source asn1 node. +</p> +<p><var>src_name</var>: Field name in source node. +</p> +<p>Create a deep copy of a asn1_node variable. That +function requires <code>dst</code> to be expanded using <code>asn1_create_element()</code> . +</p> +<p><strong>Returns:</strong> Return <code>ASN1_SUCCESS</code> on success. +</p></dd></dl> + +<a name="asn1_005fdup_005fnode-1"></a> +<h4 class="subheading">asn1_dup_node</h4> +<a name="asn1_005fdup_005fnode"></a><dl> +<dt><a name="index-asn1_005fdup_005fnode"></a>Function: <em>asn1_node</em> <strong>asn1_dup_node</strong> <em>(asn1_node <var>src</var>, const char * <var>src_name</var>)</em></dt> +<dd><p><var>src</var>: Source asn1 node. +</p> +<p><var>src_name</var>: Field name in source node. +</p> +<p>Create a deep copy of a asn1_node variable. This function +will return an exact copy of the provided structure. +</p> +<p><strong>Returns:</strong> Return <code>NULL</code> on failure. +</p></dd></dl> + +<a name="asn1_005fwrite_005fvalue-1"></a> +<h4 class="subheading">asn1_write_value</h4> +<a name="asn1_005fwrite_005fvalue"></a><dl> +<dt><a name="index-asn1_005fwrite_005fvalue"></a>Function: <em>int</em> <strong>asn1_write_value</strong> <em>(asn1_node <var>node_root</var>, const char * <var>name</var>, const void * <var>ivalue</var>, int <var>len</var>)</em></dt> +<dd><p><var>node_root</var>: pointer to a structure +</p> +<p><var>name</var>: the name of the element inside the structure that you want to set. +</p> +<p><var>ivalue</var>: vector used to specify the value to set. If len is >0, +VALUE must be a two’s complement form integer. if len=0 *VALUE +must be a null terminated string with an integer value. +</p> +<p><var>len</var>: number of bytes of *value to use to set the value: +value[0]..value[len-1] or 0 if value is a null terminated string +</p> +<p>Set the value of one element inside a structure. +</p> +<p>If an element is OPTIONAL and you want to delete it, you must use +the value=NULL and len=0. Using "pkix.asn": +</p> +<p>result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", +NULL, 0); +</p> +<p>Description for each type: +</p> +<p><strong>INTEGER:</strong> VALUE must contain a two’s complement form integer. +</p> +<p>value[0]=0xFF , len=1 -> integer=-1. +value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. +value[0]=0x01 , len=1 -> integer= 1. +value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. +value="123" , len=0 -> integer= 123. +</p> +<p><strong>ENUMERATED:</strong> As INTEGER (but only with not negative numbers). +</p> +<p><strong>BOOLEAN:</strong> VALUE must be the null terminated string "TRUE" or +"FALSE" and LEN != 0. +</p> +<p>value="TRUE" , len=1 -> boolean=TRUE. +value="FALSE" , len=1 -> boolean=FALSE. +</p> +<p>OBJECT IDENTIFIER: VALUE must be a null terminated string with +each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. +</p> +<p>value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. +</p> +<p><strong>UTCTime:</strong> VALUE must be a null terminated string in one of these +formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", +"YYMMDDhhmmss+hh’mm’", "YYMMDDhhmmss-hh’mm’", +"YYMMDDhhmm+hh’mm’", or "YYMMDDhhmm-hh’mm’". LEN != 0. +</p> +<p>value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 +at 12h 00m Greenwich Mean Time +</p> +<p><strong>GeneralizedTime:</strong> VALUE must be in one of this format: +"YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", +"YYYYMMDDhhmmss.s+hh’mm’", "YYYYMMDDhhmmss.s-hh’mm’", +"YYYYMMDDhhmm+hh’mm’", or "YYYYMMDDhhmm-hh’mm’" where ss.s +indicates the seconds with any precision like "10.1" or "01.02". +LEN != 0 +</p> +<p>value="2001010112001.12-0700" , len=1 -> time=Jannuary +1st, 2001 at 12h 00m 01.12s Pacific Daylight Time +</p> +<p>OCTET STRING: VALUE contains the octet string and LEN is the +number of octets. +</p> +<p>value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 -> three bytes octet string +</p> +<p><strong>GeneralString:</strong> VALUE contains the generalstring and LEN is the +number of octets. +</p> +<p>value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 -> three bytes generalstring +</p> +<p>BIT STRING: VALUE contains the bit string organized by bytes and +LEN is the number of bits. +</p> +<p>value="$\backslash$xCF" , len=6 -> bit string="110011" (six +bits) +</p> +<p><strong>CHOICE:</strong> if NAME indicates a choice type, VALUE must specify one of +the alternatives with a null terminated string. LEN != 0. Using +"pkix.asn"\: +</p> +<p>result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject", "rdnSequence", +1); +</p> +<p><strong>ANY:</strong> VALUE indicates the der encoding of a structure. LEN != 0. +</p> +<p>SEQUENCE OF: VALUE must be the null terminated string "NEW" and +LEN != 0. With this instruction another element is appended in +the sequence. The name of this element will be "?1" if it’s the +first one, "?2" for the second and so on. +</p> +<p>Using "pkix.asn"\: +</p> +<p>result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); +</p> +<p>SET OF: the same as SEQUENCE OF. Using "pkix.asn": +</p> +<p>result=asn1_write_value(cert, +"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if the value was set, +<code>ASN1_ELEMENT_NOT_FOUND</code> if <code>name</code> is not a valid element, and +<code>ASN1_VALUE_NOT_VALID</code> if <code>ivalue</code> has a wrong format. +</p></dd></dl> + +<a name="asn1_005fread_005fvalue-1"></a> +<h4 class="subheading">asn1_read_value</h4> +<a name="asn1_005fread_005fvalue"></a><dl> +<dt><a name="index-asn1_005fread_005fvalue"></a>Function: <em>int</em> <strong>asn1_read_value</strong> <em>(asn1_node <var>root</var>, const char * <var>name</var>, void * <var>ivalue</var>, int * <var>len</var>)</em></dt> +<dd><p><var>root</var>: pointer to a structure. +</p> +<p><var>name</var>: the name of the element inside a structure that you want to read. +</p> +<p><var>ivalue</var>: vector that will contain the element’s content, must be a +pointer to memory cells already allocated (may be <code>NULL</code> ). +</p> +<p><var>len</var>: number of bytes of *value: value[0]..value[len-1]. Initialy +holds the sizeof value. +</p> +<p>Returns the value of one element inside a structure. +If an element is OPTIONAL and this returns +<code>ASN1_ELEMENT_NOT_FOUND</code> , it means that this element wasn’t present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the <code>root</code> provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. +</p> +<p>Note that there can be valid values with length zero. In these case +this function will succeed and <code>len</code> will be zero. +</p> +<p><strong>INTEGER:</strong> VALUE will contain a two’s complement form integer. +</p> +<p>integer=-1 -> value[0]=0xFF , len=1. +integer=1 -> value[0]=0x01 , len=1. +</p> +<p><strong>ENUMERATED:</strong> As INTEGER (but only with not negative numbers). +</p> +<p><strong>BOOLEAN:</strong> VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. +</p> +<p>OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). +</p> +<p>LEN = strlen(VALUE)+1 +</p> +<p><strong>UTCTime:</strong> VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh’mm’" or "YYMMDDhhmmss-hh’mm’". +LEN=strlen(VALUE)+1. +</p> +<p><strong>GeneralizedTime:</strong> VALUE will be a null terminated string in the +same format used to set the value. +</p> +<p>OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. +</p> +<p><strong>GeneralString:</strong> VALUE will contain the generalstring and LEN will +be the number of octets. +</p> +<p>BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. +</p> +<p><strong>CHOICE:</strong> If NAME indicates a choice type, VALUE will specify the +alternative selected. +</p> +<p><strong>ANY:</strong> If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if value is returned, +<code>ASN1_ELEMENT_NOT_FOUND</code> if <code>name</code> is not a valid element, +<code>ASN1_VALUE_NOT_FOUND</code> if there isn’t any value for the element +selected, and <code>ASN1_MEM_ERROR</code> if The value vector isn’t big enough +to store the result, and in this case <code>len</code> will contain the number of +bytes needed. +</p></dd></dl> + +<a name="asn1_005fread_005fvalue_005ftype-1"></a> +<h4 class="subheading">asn1_read_value_type</h4> +<a name="asn1_005fread_005fvalue_005ftype"></a><dl> +<dt><a name="index-asn1_005fread_005fvalue_005ftype"></a>Function: <em>int</em> <strong>asn1_read_value_type</strong> <em>(asn1_node <var>root</var>, const char * <var>name</var>, void * <var>ivalue</var>, int * <var>len</var>, unsigned int * <var>etype</var>)</em></dt> +<dd><p><var>root</var>: pointer to a structure. +</p> +<p><var>name</var>: the name of the element inside a structure that you want to read. +</p> +<p><var>ivalue</var>: vector that will contain the element’s content, must be a +pointer to memory cells already allocated (may be <code>NULL</code> ). +</p> +<p><var>len</var>: number of bytes of *value: value[0]..value[len-1]. Initialy +holds the sizeof value. +</p> +<p><var>etype</var>: The type of the value read (ASN1_ETYPE) +</p> +<p>Returns the type and value of one element inside a structure. +If an element is OPTIONAL and this returns +<code>ASN1_ELEMENT_NOT_FOUND</code> , it means that this element wasn’t present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the <code>root</code> provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. +</p> +<p>Note that there can be valid values with length zero. In these case +this function will succeed and <code>len</code> will be zero. +</p> +<p><strong>INTEGER:</strong> VALUE will contain a two’s complement form integer. +</p> +<p>integer=-1 -> value[0]=0xFF , len=1. +integer=1 -> value[0]=0x01 , len=1. +</p> +<p><strong>ENUMERATED:</strong> As INTEGER (but only with not negative numbers). +</p> +<p><strong>BOOLEAN:</strong> VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. +</p> +<p>OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). +</p> +<p>LEN = strlen(VALUE)+1 +</p> +<p><strong>UTCTime:</strong> VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh’mm’" or "YYMMDDhhmmss-hh’mm’". +LEN=strlen(VALUE)+1. +</p> +<p><strong>GeneralizedTime:</strong> VALUE will be a null terminated string in the +same format used to set the value. +</p> +<p>OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. +</p> +<p><strong>GeneralString:</strong> VALUE will contain the generalstring and LEN will +be the number of octets. +</p> +<p>BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. +</p> +<p><strong>CHOICE:</strong> If NAME indicates a choice type, VALUE will specify the +alternative selected. +</p> +<p><strong>ANY:</strong> If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if value is returned, +<code>ASN1_ELEMENT_NOT_FOUND</code> if <code>name</code> is not a valid element, +<code>ASN1_VALUE_NOT_FOUND</code> if there isn’t any value for the element +selected, and <code>ASN1_MEM_ERROR</code> if The value vector isn’t big enough +to store the result, and in this case <code>len</code> will contain the number of +bytes needed. +</p></dd></dl> + +<a name="asn1_005fread_005ftag-1"></a> +<h4 class="subheading">asn1_read_tag</h4> +<a name="asn1_005fread_005ftag"></a><dl> +<dt><a name="index-asn1_005fread_005ftag"></a>Function: <em>int</em> <strong>asn1_read_tag</strong> <em>(asn1_node <var>root</var>, const char * <var>name</var>, int * <var>tagValue</var>, int * <var>classValue</var>)</em></dt> +<dd><p><var>root</var>: pointer to a structure +</p> +<p><var>name</var>: the name of the element inside a structure. +</p> +<p><var>tagValue</var>: variable that will contain the TAG value. +</p> +<p><var>classValue</var>: variable that will specify the TAG type. +</p> +<p>Returns the TAG and the CLASS of one element inside a structure. +CLASS can have one of these constants: <code>ASN1_CLASS_APPLICATION</code> , +<code>ASN1_CLASS_UNIVERSAL</code> , <code>ASN1_CLASS_PRIVATE</code> or +<code>ASN1_CLASS_CONTEXT_SPECIFIC</code> . +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful, <code>ASN1_ELEMENT_NOT_FOUND</code> if + <code>name</code> is not a valid element. +</p></dd></dl> + +<a name="asn1_005fread_005fnode_005fvalue-1"></a> +<h4 class="subheading">asn1_read_node_value</h4> +<a name="asn1_005fread_005fnode_005fvalue"></a><dl> +<dt><a name="index-asn1_005fread_005fnode_005fvalue"></a>Function: <em>int</em> <strong>asn1_read_node_value</strong> <em>(asn1_node <var>node</var>, asn1_data_node_st * <var>data</var>)</em></dt> +<dd><p><var>node</var>: pointer to a node. +</p> +<p><var>data</var>: a point to a asn1_data_node_st +</p> +<p>Returns the value a data node inside a asn1_node structure. +The data returned should be handled as constant values. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if the node exists. +</p></dd></dl> + + +<hr> +<a name="DER-functions"></a> +<div class="header"> +<p> +Next: <a href="#Error-handling-functions" accesskey="n" rel="next">Error handling functions</a>, Previous: <a href="#ASN_002e1-field-functions" accesskey="p" rel="prev">ASN.1 field functions</a>, Up: <a href="#Function-reference" accesskey="u" rel="up">Function reference</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="DER-functions-1"></a> +<h3 class="section">4.3 DER functions</h3> + +<a name="asn1_005flength_005fder-1"></a> +<h4 class="subheading">asn1_length_der</h4> +<a name="asn1_005flength_005fder"></a><dl> +<dt><a name="index-asn1_005flength_005fder"></a>Function: <em>void</em> <strong>asn1_length_der</strong> <em>(unsigned long int <var>len</var>, unsigned char * <var>der</var>, int * <var>der_len</var>)</em></dt> +<dd><p><var>len</var>: value to convert. +</p> +<p><var>der</var>: buffer to hold the returned encoding (may be <code>NULL</code> ). +</p> +<p><var>der_len</var>: number of meaningful bytes of ANS (der[0]..der[der_len-1]). +</p> +<p>Creates the DER encoding of the provided length value. +The <code>der</code> buffer must have enough room for the output. The maximum +length this function will encode is <code>ASN1_MAX_LENGTH_SIZE</code> . +</p> +<p>To know the size of the DER encoding use a <code>NULL</code> value for <code>der</code> . +</p></dd></dl> + +<a name="asn1_005foctet_005fder-1"></a> +<h4 class="subheading">asn1_octet_der</h4> +<a name="asn1_005foctet_005fder"></a><dl> +<dt><a name="index-asn1_005foctet_005fder"></a>Function: <em>void</em> <strong>asn1_octet_der</strong> <em>(const unsigned char * <var>str</var>, int <var>str_len</var>, unsigned char * <var>der</var>, int * <var>der_len</var>)</em></dt> +<dd><p><var>str</var>: the input data. +</p> +<p><var>str_len</var>: STR length (str[0]..str[*str_len-1]). +</p> +<p><var>der</var>: encoded string returned. +</p> +<p><var>der_len</var>: number of meaningful bytes of DER (der[0]..der[der_len-1]). +</p> +<p>Creates a length-value DER encoding for the input data. +The DER encoding of the input data will be placed in the <code>der</code> variable. +</p> +<p>Note that the OCTET STRING tag is not included in the output. +</p> +<p>This function does not return any value because it is expected +that <code>der_len</code> will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +<code>asn1_length_der()</code> . +</p></dd></dl> + +<a name="asn1_005fencode_005fsimple_005fder-1"></a> +<h4 class="subheading">asn1_encode_simple_der</h4> +<a name="asn1_005fencode_005fsimple_005fder"></a><dl> +<dt><a name="index-asn1_005fencode_005fsimple_005fder"></a>Function: <em>int</em> <strong>asn1_encode_simple_der</strong> <em>(unsigned int <var>etype</var>, const unsigned char * <var>str</var>, unsigned int <var>str_len</var>, unsigned char * <var>tl</var>, unsigned int * <var>tl_len</var>)</em></dt> +<dd><p><var>etype</var>: The type of the string to be encoded (ASN1_ETYPE_) +</p> +<p><var>str</var>: the string data. +</p> +<p><var>str_len</var>: the string length +</p> +<p><var>tl</var>: the encoded tag and length +</p> +<p><var>tl_len</var>: the bytes of the <code>tl</code> field +</p> +<p>Creates the DER encoding for various simple ASN.1 types like strings etc. +It stores the tag and length in <code>tl</code> , which should have space for at least +<code>ASN1_MAX_TL_SIZE</code> bytes. Initially <code>tl_len</code> should contain the size of <code>tl</code> . +</p> +<p>The complete DER encoding should consist of the value in <code>tl</code> appended +with the provided <code>str</code> . +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful or an error value. +</p></dd></dl> + +<a name="asn1_005fbit_005fder-1"></a> +<h4 class="subheading">asn1_bit_der</h4> +<a name="asn1_005fbit_005fder"></a><dl> +<dt><a name="index-asn1_005fbit_005fder"></a>Function: <em>void</em> <strong>asn1_bit_der</strong> <em>(const unsigned char * <var>str</var>, int <var>bit_len</var>, unsigned char * <var>der</var>, int * <var>der_len</var>)</em></dt> +<dd><p><var>str</var>: BIT string. +</p> +<p><var>bit_len</var>: number of meaningful bits in STR. +</p> +<p><var>der</var>: string returned. +</p> +<p><var>der_len</var>: number of meaningful bytes of DER +(der[0]..der[ans_len-1]). +</p> +<p>Creates a length-value DER encoding for the input data +as it would have been for a BIT STRING. +The DER encoded data will be copied in <code>der</code> . +</p> +<p>Note that the BIT STRING tag is not included in the output. +</p> +<p>This function does not return any value because it is expected +that <code>der_len</code> will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +<code>asn1_length_der()</code> . +</p></dd></dl> + +<a name="asn1_005fder_005fcoding-1"></a> +<h4 class="subheading">asn1_der_coding</h4> +<a name="asn1_005fder_005fcoding"></a><dl> +<dt><a name="index-asn1_005fder_005fcoding"></a>Function: <em>int</em> <strong>asn1_der_coding</strong> <em>(asn1_node <var>element</var>, const char * <var>name</var>, void * <var>ider</var>, int * <var>len</var>, char * <var>ErrorDescription</var>)</em></dt> +<dd><p><var>element</var>: pointer to an ASN1 element +</p> +<p><var>name</var>: the name of the structure you want to encode (it must be +inside *POINTER). +</p> +<p><var>ider</var>: vector that will contain the DER encoding. DER must be a +pointer to memory cells already allocated. +</p> +<p><var>len</var>: number of bytes of * <code>ider</code> : <code>ider</code> [0].. <code>ider</code> [len-1], Initialy +holds the sizeof of der vector. +</p> +<p><var>ErrorDescription</var>: return the error description or an empty +string if success. +</p> +<p>Creates the DER encoding for the NAME structure (inside *POINTER +structure). +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code> +if <code>name</code> is not a valid element, <code>ASN1_VALUE_NOT_FOUND</code> if there +is an element without a value, <code>ASN1_MEM_ERROR</code> if the <code>ider</code> vector isn’t big enough and in this case <code>len</code> will contain the +length needed. +</p></dd></dl> + +<a name="asn1_005fget_005flength_005fder-1"></a> +<h4 class="subheading">asn1_get_length_der</h4> +<a name="asn1_005fget_005flength_005fder"></a><dl> +<dt><a name="index-asn1_005fget_005flength_005fder"></a>Function: <em>long</em> <strong>asn1_get_length_der</strong> <em>(const unsigned char * <var>der</var>, int <var>der_len</var>, int * <var>len</var>)</em></dt> +<dd><p><var>der</var>: DER data to decode. +</p> +<p><var>der_len</var>: Length of DER data to decode. +</p> +<p><var>len</var>: Output variable containing the length of the DER length field. +</p> +<p>Extract a length field from DER data. +</p> +<p><strong>Returns:</strong> Return the decoded length value, or -1 on indefinite +length, or -2 when the value was too big to fit in a int, or -4 +when the decoded length value plus <code>len</code> would exceed <code>der_len</code> . +</p></dd></dl> + +<a name="asn1_005fget_005ftag_005fder-1"></a> +<h4 class="subheading">asn1_get_tag_der</h4> +<a name="asn1_005fget_005ftag_005fder"></a><dl> +<dt><a name="index-asn1_005fget_005ftag_005fder"></a>Function: <em>int</em> <strong>asn1_get_tag_der</strong> <em>(const unsigned char * <var>der</var>, int <var>der_len</var>, unsigned char * <var>cls</var>, int * <var>len</var>, unsigned long * <var>tag</var>)</em></dt> +<dd><p><var>der</var>: DER data to decode. +</p> +<p><var>der_len</var>: Length of DER data to decode. +</p> +<p><var>cls</var>: Output variable containing decoded class. +</p> +<p><var>len</var>: Output variable containing the length of the DER TAG data. +</p> +<p><var>tag</var>: Output variable containing the decoded tag. +</p> +<p>Decode the class and TAG from DER code. +</p> +<p><strong>Returns:</strong> Returns <code>ASN1_SUCCESS</code> on success, or an error. +</p></dd></dl> + +<a name="asn1_005fget_005flength_005fber-1"></a> +<h4 class="subheading">asn1_get_length_ber</h4> +<a name="asn1_005fget_005flength_005fber"></a><dl> +<dt><a name="index-asn1_005fget_005flength_005fber"></a>Function: <em>long</em> <strong>asn1_get_length_ber</strong> <em>(const unsigned char * <var>ber</var>, int <var>ber_len</var>, int * <var>len</var>)</em></dt> +<dd><p><var>ber</var>: BER data to decode. +</p> +<p><var>ber_len</var>: Length of BER data to decode. +</p> +<p><var>len</var>: Output variable containing the length of the BER length field. +</p> +<p>Extract a length field from BER data. The difference to +<code>asn1_get_length_der()</code> is that this function will return a length +even if the value has indefinite encoding. +</p> +<p><strong>Returns:</strong> Return the decoded length value, or negative value when +the value was too big. +</p> +<p><strong>Since:</strong> 2.0 +</p></dd></dl> + +<a name="asn1_005fget_005foctet_005fder-1"></a> +<h4 class="subheading">asn1_get_octet_der</h4> +<a name="asn1_005fget_005foctet_005fder"></a><dl> +<dt><a name="index-asn1_005fget_005foctet_005fder"></a>Function: <em>int</em> <strong>asn1_get_octet_der</strong> <em>(const unsigned char * <var>der</var>, int <var>der_len</var>, int * <var>ret_len</var>, unsigned char * <var>str</var>, int <var>str_size</var>, int * <var>str_len</var>)</em></dt> +<dd><p><var>der</var>: DER data to decode containing the OCTET SEQUENCE. +</p> +<p><var>der_len</var>: Length of DER data to decode. +</p> +<p><var>ret_len</var>: Output variable containing the length of the DER data. +</p> +<p><var>str</var>: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. +</p> +<p><var>str_size</var>: Length of pre-allocated output buffer. +</p> +<p><var>str_len</var>: Output variable containing the length of the OCTET SEQUENCE. +</p> +<p>Extract an OCTET SEQUENCE from DER data. +</p> +<p><strong>Returns:</strong> Returns <code>ASN1_SUCCESS</code> on success, or an error. +</p></dd></dl> + +<a name="asn1_005fget_005fobject_005fid_005fder-1"></a> +<h4 class="subheading">asn1_get_object_id_der</h4> +<a name="asn1_005fget_005fobject_005fid_005fder"></a><dl> +<dt><a name="index-asn1_005fget_005fobject_005fid_005fder"></a>Function: <em>int</em> <strong>asn1_get_object_id_der</strong> <em>(const unsigned char * <var>der</var>, int <var>der_len</var>, int * <var>ret_len</var>, char * <var>str</var>, int <var>str_size</var>)</em></dt> +<dd><p><var>der</var>: DER data to decode containing the OBJECT IDENTIFIER +</p> +<p><var>der_len</var>: Length of DER data to decode. +</p> +<p><var>ret_len</var>: Output variable containing the length of the DER data. +</p> +<p><var>str</var>: Pre-allocated output buffer to put the textual object id in. +</p> +<p><var>str_size</var>: Length of pre-allocated output buffer. +</p> +<p>Converts a DER encoded object identifier to its textual form. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> on success, or an error. +</p></dd></dl> + +<a name="asn1_005fget_005fbit_005fder-1"></a> +<h4 class="subheading">asn1_get_bit_der</h4> +<a name="asn1_005fget_005fbit_005fder"></a><dl> +<dt><a name="index-asn1_005fget_005fbit_005fder"></a>Function: <em>int</em> <strong>asn1_get_bit_der</strong> <em>(const unsigned char * <var>der</var>, int <var>der_len</var>, int * <var>ret_len</var>, unsigned char * <var>str</var>, int <var>str_size</var>, int * <var>bit_len</var>)</em></dt> +<dd><p><var>der</var>: DER data to decode containing the BIT SEQUENCE. +</p> +<p><var>der_len</var>: Length of DER data to decode. +</p> +<p><var>ret_len</var>: Output variable containing the length of the DER data. +</p> +<p><var>str</var>: Pre-allocated output buffer to put decoded BIT SEQUENCE in. +</p> +<p><var>str_size</var>: Length of pre-allocated output buffer. +</p> +<p><var>bit_len</var>: Output variable containing the size of the BIT SEQUENCE. +</p> +<p>Extract a BIT SEQUENCE from DER data. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> on success, or an error. +</p></dd></dl> + +<a name="asn1_005fder_005fdecoding2-1"></a> +<h4 class="subheading">asn1_der_decoding2</h4> +<a name="asn1_005fder_005fdecoding2"></a><dl> +<dt><a name="index-asn1_005fder_005fdecoding2"></a>Function: <em>int</em> <strong>asn1_der_decoding2</strong> <em>(asn1_node * <var>element</var>, const void * <var>ider</var>, int * <var>max_ider_len</var>, unsigned int <var>flags</var>, char * <var>errorDescription</var>)</em></dt> +<dd><p><var>element</var>: pointer to an ASN1 structure. +</p> +<p><var>ider</var>: vector that contains the DER encoding. +</p> +<p><var>max_ider_len</var>: pointer to an integer giving the information about the +maximal number of bytes occupied by * <code>ider</code> . The real size of the DER +encoding is returned through this pointer. +</p> +<p><var>flags</var>: flags controlling the behaviour of the function. +</p> +<p><var>errorDescription</var>: null-terminated string contains details when an +error occurred. +</p> +<p>Fill the structure * <code>element</code> with values of a DER encoding string. The +structure must just be created with function <code>asn1_create_element()</code> . +</p> +<p>If <code>ASN1_DECODE_FLAG_ALLOW_PADDING</code> flag is set then the function will ignore +padding after the decoded DER data. Upon a successful return the value of +* <code>max_ider_len</code> will be set to the number of bytes decoded. +</p> +<p>If <code>ASN1_DECODE_FLAG_STRICT_DER</code> flag is set then the function will +not decode any BER-encoded elements. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code> +if <code>ELEMENT</code> is <code>NULL</code> , and <code>ASN1_TAG_ERROR</code> or +<code>ASN1_DER_ERROR</code> if the der encoding doesn’t match the structure +name (* <code>ELEMENT</code> deleted). +</p></dd></dl> + +<a name="asn1_005fder_005fdecoding-1"></a> +<h4 class="subheading">asn1_der_decoding</h4> +<a name="asn1_005fder_005fdecoding"></a><dl> +<dt><a name="index-asn1_005fder_005fdecoding"></a>Function: <em>int</em> <strong>asn1_der_decoding</strong> <em>(asn1_node * <var>element</var>, const void * <var>ider</var>, int <var>ider_len</var>, char * <var>errorDescription</var>)</em></dt> +<dd><p><var>element</var>: pointer to an ASN1 structure. +</p> +<p><var>ider</var>: vector that contains the DER encoding. +</p> +<p><var>ider_len</var>: number of bytes of * <code>ider</code> : <code>ider</code> [0].. <code>ider</code> [len-1]. +</p> +<p><var>errorDescription</var>: null-terminated string contains details when an +error occurred. +</p> +<p>Fill the structure * <code>element</code> with values of a DER encoding +string. The structure must just be created with function +<code>asn1_create_element()</code> . +</p> +<p>Note that the * <code>element</code> variable is provided as a pointer for +historical reasons. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code> +if <code>ELEMENT</code> is <code>NULL</code> , and <code>ASN1_TAG_ERROR</code> or +<code>ASN1_DER_ERROR</code> if the der encoding doesn’t match the structure +name (* <code>ELEMENT</code> deleted). +</p></dd></dl> + +<a name="asn1_005fder_005fdecoding_005felement-1"></a> +<h4 class="subheading">asn1_der_decoding_element</h4> +<a name="asn1_005fder_005fdecoding_005felement"></a><dl> +<dt><a name="index-asn1_005fder_005fdecoding_005felement"></a>Function: <em>int</em> <strong>asn1_der_decoding_element</strong> <em>(asn1_node * <var>structure</var>, const char * <var>elementName</var>, const void * <var>ider</var>, int <var>len</var>, char * <var>errorDescription</var>)</em></dt> +<dd><p><var>structure</var>: pointer to an ASN1 structure +</p> +<p><var>elementName</var>: name of the element to fill +</p> +<p><var>ider</var>: vector that contains the DER encoding of the whole structure. +</p> +<p><var>len</var>: number of bytes of *der: der[0]..der[len-1] +</p> +<p><var>errorDescription</var>: null-terminated string contains details when an +error occurred. +</p> +<p>Fill the element named <code>ELEMENTNAME</code> with values of a DER encoding +string. The structure must just be created with function +<code>asn1_create_element()</code> . The DER vector must contain the encoding +string of the whole <code>STRUCTURE</code> . If an error occurs during the +decoding procedure, the * <code>STRUCTURE</code> is deleted and set equal to +<code>NULL</code> . +</p> +<p>This function is deprecated and may just be an alias to asn1_der_decoding +in future versions. Use <code>asn1_der_decoding()</code> instead. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code> +if ELEMENT is <code>NULL</code> or <code>elementName</code> == NULL, and +<code>ASN1_TAG_ERROR</code> or <code>ASN1_DER_ERROR</code> if the der encoding doesn’t +match the structure <code>structure</code> (*ELEMENT deleted). +</p></dd></dl> + +<a name="asn1_005fder_005fdecoding_005fstartEnd-1"></a> +<h4 class="subheading">asn1_der_decoding_startEnd</h4> +<a name="asn1_005fder_005fdecoding_005fstartEnd"></a><dl> +<dt><a name="index-asn1_005fder_005fdecoding_005fstartEnd"></a>Function: <em>int</em> <strong>asn1_der_decoding_startEnd</strong> <em>(asn1_node <var>element</var>, const void * <var>ider</var>, int <var>ider_len</var>, const char * <var>name_element</var>, int * <var>start</var>, int * <var>end</var>)</em></dt> +<dd><p><var>element</var>: pointer to an ASN1 element +</p> +<p><var>ider</var>: vector that contains the DER encoding. +</p> +<p><var>ider_len</var>: number of bytes of * <code>ider</code> : <code>ider</code> [0].. <code>ider</code> [len-1] +</p> +<p><var>name_element</var>: an element of NAME structure. +</p> +<p><var>start</var>: the position of the first byte of NAME_ELEMENT decoding +( <code>ider</code> [*start]) +</p> +<p><var>end</var>: the position of the last byte of NAME_ELEMENT decoding +( <code>ider</code> [*end]) +</p> +<p>Find the start and end point of an element in a DER encoding +string. I mean that if you have a der encoding and you have already +used the function <code>asn1_der_decoding()</code> to fill a structure, it may +happen that you want to find the piece of string concerning an +element of the structure. +</p> +<p>One example is the sequence "tbsCertificate" inside an X509 +certificate. +</p> +<p>Note that since libtasn1 3.7 the <code>ider</code> and <code>ider_len</code> parameters +can be omitted, if the element is already decoded using <code>asn1_der_decoding()</code> . +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code> +if ELEMENT is <code>asn1_node</code> EMPTY or <code>name_element</code> is not a valid +element, <code>ASN1_TAG_ERROR</code> or <code>ASN1_DER_ERROR</code> if the der encoding +doesn’t match the structure ELEMENT. +</p></dd></dl> + +<a name="asn1_005fexpand_005fany_005fdefined_005fby-1"></a> +<h4 class="subheading">asn1_expand_any_defined_by</h4> +<a name="asn1_005fexpand_005fany_005fdefined_005fby"></a><dl> +<dt><a name="index-asn1_005fexpand_005fany_005fdefined_005fby"></a>Function: <em>int</em> <strong>asn1_expand_any_defined_by</strong> <em>(asn1_node <var>definitions</var>, asn1_node * <var>element</var>)</em></dt> +<dd><p><var>definitions</var>: ASN1 definitions +</p> +<p><var>element</var>: pointer to an ASN1 structure +</p> +<p>Expands every "ANY DEFINED BY" element of a structure created from +a DER decoding process (asn1_der_decoding function). The element +ANY must be defined by an OBJECT IDENTIFIER. The type used to +expand the element ANY is the first one following the definition of +the actual value of the OBJECT IDENTIFIER. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if Substitution OK, <code>ASN1_ERROR_TYPE_ANY</code> if +some "ANY DEFINED BY" element couldn’t be expanded due to a +problem in OBJECT_ID -> TYPE association, or other error codes +depending on DER decoding. +</p></dd></dl> + +<a name="asn1_005fexpand_005foctet_005fstring-1"></a> +<h4 class="subheading">asn1_expand_octet_string</h4> +<a name="asn1_005fexpand_005foctet_005fstring"></a><dl> +<dt><a name="index-asn1_005fexpand_005foctet_005fstring"></a>Function: <em>int</em> <strong>asn1_expand_octet_string</strong> <em>(asn1_node <var>definitions</var>, asn1_node * <var>element</var>, const char * <var>octetName</var>, const char * <var>objectName</var>)</em></dt> +<dd><p><var>definitions</var>: ASN1 definitions +</p> +<p><var>element</var>: pointer to an ASN1 structure +</p> +<p><var>octetName</var>: name of the OCTECT STRING field to expand. +</p> +<p><var>objectName</var>: name of the OBJECT IDENTIFIER field to use to define +the type for expansion. +</p> +<p>Expands an "OCTET STRING" element of a structure created from a DER +decoding process (the <code>asn1_der_decoding()</code> function). The type used +for expansion is the first one following the definition of the +actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if substitution OK, <code>ASN1_ELEMENT_NOT_FOUND</code> +if <code>objectName</code> or <code>octetName</code> are not correct, +<code>ASN1_VALUE_NOT_VALID</code> if it wasn’t possible to find the type to +use for expansion, or other errors depending on DER decoding. +</p></dd></dl> + +<a name="asn1_005fdecode_005fsimple_005fder-1"></a> +<h4 class="subheading">asn1_decode_simple_der</h4> +<a name="asn1_005fdecode_005fsimple_005fder"></a><dl> +<dt><a name="index-asn1_005fdecode_005fsimple_005fder"></a>Function: <em>int</em> <strong>asn1_decode_simple_der</strong> <em>(unsigned int <var>etype</var>, const unsigned char * <var>der</var>, unsigned int <var>_der_len</var>, const unsigned char ** <var>str</var>, unsigned int * <var>str_len</var>)</em></dt> +<dd><p><var>etype</var>: The type of the string to be encoded (ASN1_ETYPE_) +</p> +<p><var>der</var>: the encoded string +</p> +<p><var>_der_len</var>: the bytes of the encoded string +</p> +<p><var>str</var>: a pointer to the data +</p> +<p><var>str_len</var>: the length of the data +</p> +<p>Decodes a simple DER encoded type (e.g. a string, which is not constructed). +The output is a pointer inside the <code>der</code> . +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful or an error value. +</p></dd></dl> + +<a name="asn1_005fdecode_005fsimple_005fber-1"></a> +<h4 class="subheading">asn1_decode_simple_ber</h4> +<a name="asn1_005fdecode_005fsimple_005fber"></a><dl> +<dt><a name="index-asn1_005fdecode_005fsimple_005fber"></a>Function: <em>int</em> <strong>asn1_decode_simple_ber</strong> <em>(unsigned int <var>etype</var>, const unsigned char * <var>der</var>, unsigned int <var>_der_len</var>, unsigned char ** <var>str</var>, unsigned int * <var>str_len</var>, unsigned int * <var>ber_len</var>)</em></dt> +<dd><p><var>etype</var>: The type of the string to be encoded (ASN1_ETYPE_) +</p> +<p><var>der</var>: the encoded string +</p> +<p><var>_der_len</var>: the bytes of the encoded string +</p> +<p><var>str</var>: a pointer to the data +</p> +<p><var>str_len</var>: the length of the data +</p> +<p><var>ber_len</var>: the total length occupied by BER (may be <code>NULL</code> ) +</p> +<p>Decodes a BER encoded type. The output is an allocated value +of the data. This decodes BER STRINGS only. Other types are +decoded as DER. +</p> +<p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if successful or an error value. +</p></dd></dl> + + +<hr> +<a name="Error-handling-functions"></a> +<div class="header"> +<p> +Next: <a href="#Auxilliary-functions" accesskey="n" rel="next">Auxilliary functions</a>, Previous: <a href="#DER-functions" accesskey="p" rel="prev">DER functions</a>, Up: <a href="#Function-reference" accesskey="u" rel="up">Function reference</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Error-handling-functions-1"></a> +<h3 class="section">4.4 Error handling functions</h3> + +<a name="asn1_005fperror-1"></a> +<h4 class="subheading">asn1_perror</h4> +<a name="asn1_005fperror"></a><dl> +<dt><a name="index-asn1_005fperror"></a>Function: <em>void</em> <strong>asn1_perror</strong> <em>(int <var>error</var>)</em></dt> +<dd><p><var>error</var>: is an error returned by a libtasn1 function. +</p> +<p>Prints a string to stderr with a description of an error. This +function is like <code>perror()</code> . The only difference is that it accepts +an error returned by a libtasn1 function. +</p> +<p><strong>Since:</strong> 1.6 +</p></dd></dl> + +<a name="asn1_005fstrerror-1"></a> +<h4 class="subheading">asn1_strerror</h4> +<a name="asn1_005fstrerror"></a><dl> +<dt><a name="index-asn1_005fstrerror"></a>Function: <em>const char *</em> <strong>asn1_strerror</strong> <em>(int <var>error</var>)</em></dt> +<dd><p><var>error</var>: is an error returned by a libtasn1 function. +</p> +<p>Returns a string with a description of an error. This function is +similar to strerror. The only difference is that it accepts an +error (number) returned by a libtasn1 function. +</p> +<p><strong>Returns:</strong> Pointer to static zero-terminated string describing error +code. +</p> +<p><strong>Since:</strong> 1.6 +</p></dd></dl> + + +<hr> +<a name="Auxilliary-functions"></a> +<div class="header"> +<p> +Previous: <a href="#Error-handling-functions" accesskey="p" rel="prev">Error handling functions</a>, Up: <a href="#Function-reference" accesskey="u" rel="up">Function reference</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Auxilliary-functions-1"></a> +<h3 class="section">4.5 Auxilliary functions</h3> + +<a name="asn1_005ffind_005fnode-1"></a> +<h4 class="subheading">asn1_find_node</h4> +<a name="asn1_005ffind_005fnode"></a><dl> +<dt><a name="index-asn1_005ffind_005fnode"></a>Function: <em>asn1_node</em> <strong>asn1_find_node</strong> <em>(asn1_node <var>pointer</var>, const char * <var>name</var>)</em></dt> +<dd><p><var>pointer</var>: NODE_ASN element pointer. +</p> +<p><var>name</var>: null terminated string with the element’s name to find. +</p> +<p>Searches for an element called <code>name</code> starting from <code>pointer</code> . The +name is composed by differents identifiers separated by dots. When +* <code>pointer</code> has a name, the first identifier must be the name of +* <code>pointer</code> , otherwise it must be the name of one child of * <code>pointer</code> . +</p> +<p><strong>Returns:</strong> the search result, or <code>NULL</code> if not found. +</p></dd></dl> + +<a name="asn1_005fcheck_005fversion-1"></a> +<h4 class="subheading">asn1_check_version</h4> +<a name="asn1_005fcheck_005fversion"></a><dl> +<dt><a name="index-asn1_005fcheck_005fversion"></a>Function: <em>const char *</em> <strong>asn1_check_version</strong> <em>(const char * <var>req_version</var>)</em></dt> +<dd><p><var>req_version</var>: Required version number, or <code>NULL</code> . +</p> +<p>Check that the version of the library is at minimum the +requested one and return the version string; return <code>NULL</code> if the +condition is not satisfied. If a <code>NULL</code> is passed to this function, +no check is done, but the version string is simply returned. +</p> +<p>See <code>ASN1_VERSION</code> for a suitable <code>req_version</code> string. +</p> +<p><strong>Returns:</strong> Version string of run-time library, or <code>NULL</code> if the +run-time library does not meet the required version number. +</p></dd></dl> + + +<hr> +<a name="Copying-Information"></a> +<div class="header"> +<p> +Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previous: <a href="#Function-reference" accesskey="p" rel="prev">Function reference</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Copying-Information-1"></a> +<h2 class="appendix">Appendix A Copying Information</h2> + +<table class="menu" border="0" cellspacing="0"> +<tr><td align="left" valign="top">• <a href="#GNU-Free-Documentation-License" accesskey="1">GNU Free Documentation License</a>:</td><td> </td><td align="left" valign="top">License for copying this manual. +</td></tr> +</table> + +<hr> +<a name="GNU-Free-Documentation-License"></a> +<div class="header"> +<p> +Up: <a href="#Copying-Information" accesskey="u" rel="up">Copying Information</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="GNU-Free-Documentation-License-1"></a> +<h3 class="appendixsec">A.1 GNU Free Documentation License</h3> + +<a name="index-FDL_002c-GNU-Free-Documentation-License"></a> + +<div align="center">Version 1.3, 3 November 2008 +</div> + +<div class="display"> +<pre class="display">Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +<a href="http://fsf.org/">http://fsf.org/</a> + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +</pre></div> + +<ol> +<li> PREAMBLE + +<p>The purpose of this License is to make a manual, textbook, or other +functional and useful document <em>free</em> in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +</p> +<p>This License is a kind of “copyleft”, which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +</p> +<p>We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +</p> +</li><li> APPLICABILITY AND DEFINITIONS + +<p>This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The “Document”, below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as “you”. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +</p> +<p>A “Modified Version” of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +</p> +<p>A “Secondary Section” is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document’s overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +</p> +<p>The “Invariant Sections” are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +</p> +<p>The “Cover Texts” are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +</p> +<p>A “Transparent” copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not “Transparent” is called “Opaque”. +</p> +<p>Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. +</p> +<p>The “Title Page” means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, “Title Page” means +the text near the most prominent appearance of the work’s title, +preceding the beginning of the body of the text. +</p> +<p>The “publisher” means any person or entity that distributes copies +of the Document to the public. +</p> +<p>A section “Entitled XYZ” means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as “Acknowledgements”, +“Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” +of such a section when you modify the Document means that it remains a +section “Entitled XYZ” according to this definition. +</p> +<p>The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +</p> +</li><li> VERBATIM COPYING + +<p>You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +</p> +<p>You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +</p> +</li><li> COPYING IN QUANTITY + +<p>If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document’s license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +</p> +<p>If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +</p> +<p>If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +</p> +<p>It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +</p> +</li><li> MODIFICATIONS + +<p>You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +</p> +<ol> +<li> Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +</li><li> List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +</li><li> State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +</li><li> Preserve all the copyright notices of the Document. + +</li><li> Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +</li><li> Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +</li><li> Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document’s license notice. + +</li><li> Include an unaltered copy of this License. + +</li><li> Preserve the section Entitled “History”, Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled “History” in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +</li><li> Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the “History” section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +</li><li> For any section Entitled “Acknowledgements” or “Dedications”, Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +</li><li> Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +</li><li> Delete any section Entitled “Endorsements”. Such a section +may not be included in the Modified Version. + +</li><li> Do not retitle any existing section to be Entitled “Endorsements” or +to conflict in title with any Invariant Section. + +</li><li> Preserve any Warranty Disclaimers. +</li></ol> + +<p>If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version’s license notice. +These titles must be distinct from any other section titles. +</p> +<p>You may add a section Entitled “Endorsements”, provided it contains +nothing but endorsements of your Modified Version by various +parties—for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +</p> +<p>You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +</p> +<p>The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +</p> +</li><li> COMBINING DOCUMENTS + +<p>You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +</p> +<p>The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +</p> +<p>In the combination, you must combine any sections Entitled “History” +in the various original documents, forming one section Entitled +“History”; likewise combine any sections Entitled “Acknowledgements”, +and any sections Entitled “Dedications”. You must delete all +sections Entitled “Endorsements.” +</p> +</li><li> COLLECTIONS OF DOCUMENTS + +<p>You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +</p> +<p>You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +</p> +</li><li> AGGREGATION WITH INDEPENDENT WORKS + +<p>A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an “aggregate” if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation’s users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +</p> +<p>If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document’s Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +</p> +</li><li> TRANSLATION + +<p>Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +</p> +<p>If a section in the Document is Entitled “Acknowledgements”, +“Dedications”, or “History”, the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +</p> +</li><li> TERMINATION + +<p>You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +</p> +<p>However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +</p> +<p>Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +</p> +<p>Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +</p> +</li><li> FUTURE REVISIONS OF THIS LICENSE + +<p>The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>. +</p> +<p>Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy’s public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +</p> +</li><li> RELICENSING + +<p>“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +“Massive Multiauthor Collaboration” (or “MMC”) contained in the +site means any set of copyrightable works thus published on the MMC +site. +</p> +<p>“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +</p> +<p>“Incorporate” means to publish or republish a Document, in whole or +in part, as part of another Document. +</p> +<p>An MMC is “eligible for relicensing” if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +</p> +<p>The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +</p> +</li></ol> + +<a name="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></a> +<h3 class="heading">ADDENDUM: How to use this License for your documents</h3> + +<p>To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +</p> +<div class="smallexample"> +<pre class="smallexample"> Copyright (C) <var>year</var> <var>your name</var>. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +</pre></div> + +<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the “with…Texts.” line with this: +</p> +<div class="smallexample"> +<pre class="smallexample"> with the Invariant Sections being <var>list their titles</var>, with + the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts + being <var>list</var>. +</pre></div> + +<p>If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +</p> +<p>If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +</p> + +<hr> +<a name="Concept-Index"></a> +<div class="header"> +<p> +Next: <a href="#Function-and-Data-Index" accesskey="n" rel="next">Function and Data Index</a>, Previous: <a href="#Copying-Information" accesskey="p" rel="prev">Copying Information</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Concept-Index-1"></a> +<h2 class="unnumbered">Concept Index</h2> + +<table><tr><th valign="top">Jump to: </th><td><a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a> + +</td></tr></table> +<table class="index-cp" border="0"> +<tr><td></td><th align="left">Index Entry</th><td> </td><th align="left"> Section</th></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-A">A</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-ASN_002e1-schema">ASN.1 schema</a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-syntax">ASN.1 syntax</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1Coding-program">asn1Coding program</a>:</td><td> </td><td valign="top"><a href="#Invoking-asn1Coding">Invoking asn1Coding</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1Decoding-program">asn1Decoding program</a>:</td><td> </td><td valign="top"><a href="#Invoking-asn1Decoding">Invoking asn1Decoding</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1Parser-program">asn1Parser program</a>:</td><td> </td><td valign="top"><a href="#Invoking-asn1Parser">Invoking asn1Parser</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-F">F</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-FDL_002c-GNU-Free-Documentation-License">FDL, GNU Free Documentation License</a>:</td><td> </td><td valign="top"><a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-Future-developments">Future developments</a>:</td><td> </td><td valign="top"><a href="#Future-developments">Future developments</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-H">H</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-Header-file-libtasn1_002eh">Header file libtasn1.h</a>:</td><td> </td><td valign="top"><a href="#Library-Notes">Library Notes</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-M">M</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-Main-type-asn1_005fnode">Main type asn1_node</a>:</td><td> </td><td valign="top"><a href="#Library-Notes">Library Notes</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-P">P</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-Porting">Porting</a>:</td><td> </td><td valign="top"><a href="#Introduction">Introduction</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-S">S</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-Supported-ASN_002e1-types_002c-list-of">Supported ASN.1 types, list of</a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-syntax">ASN.1 syntax</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-T">T</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-threads">threads</a>:</td><td> </td><td valign="top"><a href="#Introduction">Introduction</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +</table> +<table><tr><th valign="top">Jump to: </th><td><a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a> + +<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a> + +</td></tr></table> + +<hr> +<a name="Function-and-Data-Index"></a> +<div class="header"> +<p> +Previous: <a href="#Concept-Index" accesskey="p" rel="prev">Concept Index</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<a name="Function-and-Data-Index-1"></a> +<h2 class="unnumbered">Function and Data Index</h2> + +<table><tr><th valign="top">Jump to: </th><td><a class="summary-letter" href="#Function-and-Data-Index_fn_letter-A"><b>A</b></a> + +</td></tr></table> +<table class="index-fn" border="0"> +<tr><td></td><th align="left">Index Entry</th><td> </td><th align="left"> Section</th></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Function-and-Data-Index_fn_letter-A">A</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005farray2tree"><code>asn1_array2tree</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fbit_005fder"><code>asn1_bit_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fcheck_005fversion"><code>asn1_check_version</code></a>:</td><td> </td><td valign="top"><a href="#Auxilliary-functions">Auxilliary functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fcopy_005fnode"><code>asn1_copy_node</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fcreate_005felement"><code>asn1_create_element</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fdecode_005fsimple_005fber"><code>asn1_decode_simple_ber</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fdecode_005fsimple_005fder"><code>asn1_decode_simple_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fdelete_005felement"><code>asn1_delete_element</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fdelete_005fstructure"><code>asn1_delete_structure</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fdelete_005fstructure2"><code>asn1_delete_structure2</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fder_005fcoding"><code>asn1_der_coding</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fder_005fdecoding"><code>asn1_der_decoding</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fder_005fdecoding2"><code>asn1_der_decoding2</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fder_005fdecoding_005felement"><code>asn1_der_decoding_element</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fder_005fdecoding_005fstartEnd"><code>asn1_der_decoding_startEnd</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fdup_005fnode"><code>asn1_dup_node</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fencode_005fsimple_005fder"><code>asn1_encode_simple_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fexpand_005fany_005fdefined_005fby"><code>asn1_expand_any_defined_by</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fexpand_005foctet_005fstring"><code>asn1_expand_octet_string</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005ffind_005fnode"><code>asn1_find_node</code></a>:</td><td> </td><td valign="top"><a href="#Auxilliary-functions">Auxilliary functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005ffind_005fstructure_005ffrom_005foid"><code>asn1_find_structure_from_oid</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fget_005fbit_005fder"><code>asn1_get_bit_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fget_005flength_005fber"><code>asn1_get_length_ber</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fget_005flength_005fder"><code>asn1_get_length_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fget_005fobject_005fid_005fder"><code>asn1_get_object_id_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fget_005foctet_005fder"><code>asn1_get_octet_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fget_005ftag_005fder"><code>asn1_get_tag_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005flength_005fder"><code>asn1_length_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fnumber_005fof_005felements"><code>asn1_number_of_elements</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005foctet_005fder"><code>asn1_octet_der</code></a>:</td><td> </td><td valign="top"><a href="#DER-functions">DER functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fparser2array"><code>asn1_parser2array</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-schema-functions">ASN.1 schema functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fparser2tree"><code>asn1_parser2tree</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-schema-functions">ASN.1 schema functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fperror"><code>asn1_perror</code></a>:</td><td> </td><td valign="top"><a href="#Error-handling-functions">Error handling functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fprint_005fstructure"><code>asn1_print_structure</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fread_005fnode_005fvalue"><code>asn1_read_node_value</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fread_005ftag"><code>asn1_read_tag</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fread_005fvalue"><code>asn1_read_value</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fread_005fvalue_005ftype"><code>asn1_read_value_type</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fstrerror"><code>asn1_strerror</code></a>:</td><td> </td><td valign="top"><a href="#Error-handling-functions">Error handling functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-asn1_005fwrite_005fvalue"><code>asn1_write_value</code></a>:</td><td> </td><td valign="top"><a href="#ASN_002e1-field-functions">ASN.1 field functions</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +</table> +<table><tr><th valign="top">Jump to: </th><td><a class="summary-letter" href="#Function-and-Data-Index_fn_letter-A"><b>A</b></a> + +</td></tr></table> + +<hr> + + + +</body> +</html> diff --git a/doc/libtasn1.info b/doc/libtasn1.info new file mode 100644 index 0000000..f004f50 --- /dev/null +++ b/doc/libtasn1.info @@ -0,0 +1,2136 @@ +This is libtasn1.info, produced by makeinfo version 6.0 from +libtasn1.texi. + +This manual is for GNU Libtasn1 (version 4.8, 4 April 2016), which is a +library for Abstract Syntax Notation One (ASN.1) and Distinguished +Encoding Rules (DER) manipulation. + + Copyright (C) 2001-2015 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License". +INFO-DIR-SECTION Software libraries +START-INFO-DIR-ENTRY +* libtasn1: (libtasn1). Library for Abstract Syntax Notation One (ASN.1). +END-INFO-DIR-ENTRY + + +File: libtasn1.info, Node: Top, Next: Introduction, Up: (dir) + +Libtasn1 +******** + +This manual is for GNU Libtasn1 (version 4.8, 4 April 2016), which is a +library for Abstract Syntax Notation One (ASN.1) and Distinguished +Encoding Rules (DER) manipulation. + + Copyright (C) 2001-2015 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License". + +* Menu: + +* Introduction:: +* ASN.1 structure handling:: +* Utilities:: +* Function reference:: +* Copying Information:: + +Indices + +* Concept Index:: Index of concepts and programs. +* Function and Data Index:: Index of functions, variables and data types. + + +File: libtasn1.info, Node: Introduction, Next: ASN.1 structure handling, Prev: Top, Up: Top + +1 Introduction +************** + +This document describes the Libtasn1 library that provides Abstract +Syntax Notation One (ASN.1, as specified by the X.680 ITU-T +recommendation) parsing and structures management, and Distinguished +Encoding Rules (DER, as per X.690) encoding and decoding functions. + + The main features of this library are: + + * On-line ASN.1 structure management that doesn't require any C code + file generation. + + * Off-line ASN.1 structure management with C code file generation + containing an array. + + * Distinguished Encoding Rules (DER) encoding support. + + * No limits for INTEGER and ENUMERATED values. + + * It's Free Software. Anybody can use, modify, and redistribute the + library under the terms of the GNU Lesser General Public License + version 2.1 or later. The command line tools, self-tests and build + infrastructure are licensed under the GNU General Public License + version 3.0 or later. + + * Thread-safety. No global variables are used and multiple library + handles and session handles may be used in parallel. + + * Portability. The code should work on all Unix like operating + systems, and Windows. The library itself should be portable to any + C89 system, not even POSIX is required. + + +File: libtasn1.info, Node: ASN.1 structure handling, Next: Utilities, Prev: Introduction, Up: Top + +2 ASN.1 structure handling +************************** + +* Menu: + +* ASN.1 syntax:: +* Naming:: +* Simple parsing:: +* Library Notes:: +* Future developments:: + + +File: libtasn1.info, Node: ASN.1 syntax, Next: Naming, Up: ASN.1 structure handling + +2.1 ASN.1 syntax +================ + +The parser is case sensitive. The comments begin with '--' and end +either with another '--', or at the end of the respective line, +whichever comes first. The C-style '/*', '*/' comments are not +supported. + + For an example of the syntax, check the 'pkix.asn' file distributed +with the library. + + ASN.1 definitions must follow the syntax below: + + definitions_name {<object definition>} + + DEFINITIONS <EXPLICIT or IMPLICIT> TAGS ::= + + BEGIN + + <type and constants definitions> + + END + + The '::=' token must be separate from other elements, so the +following declaration is invalid: + + -- INCORRECT + Version ::=INTEGER + + The correct form is: + + Version ::= INTEGER + + Here is the list of types that the parser can manage: + + * 'INTEGER'; + * 'ENUMERATED'; + * 'BOOLEAN'; + * 'OBJECT IDENTIFIER'; + * 'NULL'; + * 'BIT STRING'; + * 'OCTET STRING'; + * 'UTCTime'; + * 'GeneralizedTime'; + * 'GeneralString'; + * 'NumericString'; + * 'IA5String'; + * 'TeletexString'; + * 'PrintableString'; + * 'UniversalString'; + * 'BMPString'; + * 'UTF8String'; + * 'VisibleString'; + * 'SEQUENCE'; + * 'SEQUENCE OF'; + * 'SET'; + * 'SET OF'; + * 'CHOICE'; + * 'ANY'; + * 'ANY DEFINED BY'. + + This version doesn't handle the 'REAL' type. It doesn't support the +'AUTOMATIC TAGS' option, and the 'EXPORT' and 'IMPORT' sections, either. + + The 'SIZE' constraints are allowed, but no check is done on them. + + +File: libtasn1.info, Node: Naming, Next: Simple parsing, Prev: ASN.1 syntax, Up: ASN.1 structure handling + +2.2 Naming +========== + +Consider this definition: + + Example { 1 2 3 4 } + + DEFINITIONS EXPLICIT TAGS ::= + + BEGIN + + Group ::= SEQUENCE { + id OBJECT IDENTIFIER, + value Value + } + + Value ::= SEQUENCE { + value1 INTEGER, + value2 BOOLEAN + } + + END + + The notation to access the 'Group' type of the 'Example' definition +above is 'Example.Group' (as a NUL-terminated string.) Such strings are +used in the functions described below. + + Others examples: + + * field 'id' of the 'Group' type: 'Example.Group.id'; + + * field 'value1' of the 'value' field of the 'Group' type: + 'Example.Group.value.value1'. + + Elements of structured types unnamed by the respective definition +receive the names '?1', '?2', and so on. + + The '?LAST' name indicates the last element of a 'SET OF' or +'SEQUENCE OF'. + + +File: libtasn1.info, Node: Simple parsing, Next: Library Notes, Prev: Naming, Up: ASN.1 structure handling + +2.3 Simple parsing +================== + +For simple types like 'OCTET STRING' the simple parsing functions listed +below may be used instead. + + * *note asn1_decode_simple_der:: + * *note asn1_encode_simple_der:: + + +File: libtasn1.info, Node: Library Notes, Next: Future developments, Prev: Simple parsing, Up: ASN.1 structure handling + +2.4 Library Notes +================= + +The header file of this library is 'libtasn1.h'. + + The main type used in it is 'asn1_node', and it's used to store the +ASN.1 definitions and structures (instances). + + The 'NULL' constant can be used for the variable initialization. For +example: + + asn1_node definitions = NULL; + + Some functions require an 'errorDescription' argument of type 'char +*', pointing to a pre-allocated buffer of at least +'ASN1_MAX_ERROR_DESCRIPTION_SIZE' bytes size (e.g., as in 'char +description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];'). + + 'ASN1_MAX_NAME_SIZE' is the maximum number of characters allowed for +an ASN.1 identifier. + + +File: libtasn1.info, Node: Future developments, Prev: Library Notes, Up: ASN.1 structure handling + +2.5 Future developments +======================= + + * Add functions for a C code file generation containing equivalent + data structures (not a single array like now). + + * The 'REAL' type. + + +File: libtasn1.info, Node: Utilities, Next: Function reference, Prev: ASN.1 structure handling, Up: Top + +3 Utilities +*********** + +* Menu: + +* Invoking asn1Parser:: +* Invoking asn1Coding:: +* Invoking asn1Decoding:: + + +File: libtasn1.info, Node: Invoking asn1Parser, Next: Invoking asn1Coding, Up: Utilities + +3.1 Invoking asn1Parser +======================= + +'asn1Parser' reads a single file with ASN.1 definitions and generates a +file with an array to use with libtasn1 functions. + +Usage: asn1Parser [options] file + +Options: + -h : shows the help message. + -v : shows version information and exit. + -c : checks the syntax only. + -o file : output file. + -n name : array name. + + +File: libtasn1.info, Node: Invoking asn1Coding, Next: Invoking asn1Decoding, Prev: Invoking asn1Parser, Up: Utilities + +3.2 Invoking asn1Coding +======================= + +'asn1Coding' generates a DER encoding from a file with ASN.1 definitions +and another one with assignments. + + The file with assignments must have this syntax: + +InstanceName Asn1Definition + +nameString value + +nameString value +... + + To specify the field of a 'CHOICE' to be used, specify its name as a +value to the 'CHOICE' element itself. Use '''' to denote the root +element itself. (as in the example below.) + + The output file is a binary file with the DER encoding. + +Usage: asn1Coding [options] file1 file2 + file1 : file with ASN1 definitions. + file2 : file with assignments. +Options: + -h : shows the help message. + -v : shows version information and exit. + -c : checks the syntax only. + -o file : output file. + + For example, consider an ASN.1 definitions file as follows: + +MYPKIX1 { } + +DEFINITIONS IMPLICIT TAGS ::= + +BEGIN + +OtherStruct := SEQUENCE { + x INTEGER, + y CHOICE { + y1 INTEGER, + y2 OCTET STRING }, +} + +Dss-Sig-Value ::= SEQUENCE { + r INTEGER, + s INTEGER, + other OtherStruct + z INTEGER OPTIONAL, +} + +END + + And a assignments file as follows: + +dp MYPKIX1.Dss-Sig-Value + +r 42 +s 47 +other.x 66 +other.y y1 +other.y.y1 15 +z (NULL) + + Running the command below will generate a 'assign.out' file, +containing the DER encoding of 'PKIX1.Dss-Sig-Value'. + +$ asn1Coding pkix.asn assign.asn1 + + If the root element is of the 'CHOICE' type, the assignment file may +be like (using the types defined in 'pkix.asn'): +elt PKIX1Implicit88.GeneralName + +'' dNSName +dNSName example.org + + +File: libtasn1.info, Node: Invoking asn1Decoding, Prev: Invoking asn1Coding, Up: Utilities + +3.3 Invoking asn1Decoding +========================= + +'asn1Decoding' generates an ASN.1 structure from a file with ASN.1 +definitions and a binary file with a DER encoding. + +Usage: asn1Decoding [options] file1 file2 type + file1 : file with ASN1 definitions. + file2 : binary file with a DER encoding. + type : ASN1 definition name. +Options: + -h : shows the help message. + -v : shows version information and exit. + -o file : output file. + + For example, after generating the 'assign.out' file from the example +section of the 'asn1Coding' command above, the following invocation will +decode the DER data. + +$ asn1Decoding pkix.asn assign.out PKIX1.Dss-Sig-Value + + +File: libtasn1.info, Node: Function reference, Next: Copying Information, Prev: Utilities, Up: Top + +4 Function reference +******************** + +* Menu: + +* ASN.1 schema functions:: +* ASN.1 field functions:: +* DER functions:: +* Error handling functions:: +* Auxilliary functions:: + + +File: libtasn1.info, Node: ASN.1 schema functions, Next: ASN.1 field functions, Up: Function reference + +4.1 ASN.1 schema functions +========================== + +asn1_parser2tree +---------------- + + -- Function: int asn1_parser2tree (const char * FILE, asn1_node * + DEFINITIONS, char * ERROR_DESC) + FILE: specify the path and the name of file that contains ASN.1 + declarations. + + DEFINITIONS: return the pointer to the structure created from + "file" ASN.1 declarations. + + ERROR_DESC: return the error description or an empty string if + success. + + Function used to start the parse algorithm. Creates the structures + needed to manage the definitions included in 'file' file. + + *Returns:* 'ASN1_SUCCESS' if the file has a correct syntax and + every identifier is known, 'ASN1_ELEMENT_NOT_EMPTY' if + 'definitions' not 'NULL' , 'ASN1_FILE_NOT_FOUND' if an error + occured while opening 'file' , 'ASN1_SYNTAX_ERROR' if the syntax is + not correct, 'ASN1_IDENTIFIER_NOT_FOUND' if in the file there is an + identifier that is not defined, 'ASN1_NAME_TOO_LONG' if in the file + there is an identifier whith more than 'ASN1_MAX_NAME_SIZE' + characters. + +asn1_parser2array +----------------- + + -- Function: int asn1_parser2array (const char * INPUTFILENAME, const + char * OUTPUTFILENAME, const char * VECTORNAME, char * + ERROR_DESC) + INPUTFILENAME: specify the path and the name of file that contains + ASN.1 declarations. + + OUTPUTFILENAME: specify the path and the name of file that will + contain the C vector definition. + + VECTORNAME: specify the name of the C vector. + + ERROR_DESC: return the error description or an empty string if + success. + + Function that generates a C structure from an ASN1 file. Creates a + file containing a C vector to use to manage the definitions + included in 'inputFileName' file. If 'inputFileName' is + "/aa/bb/xx.yy" and 'outputFileName' is 'NULL' , the file created is + "/aa/bb/xx_asn1_tab.c". If 'vectorName' is 'NULL' the vector name + will be "xx_asn1_tab". + + *Returns:* 'ASN1_SUCCESS' if the file has a correct syntax and + every identifier is known, 'ASN1_FILE_NOT_FOUND' if an error + occured while opening 'inputFileName' , 'ASN1_SYNTAX_ERROR' if the + syntax is not correct, 'ASN1_IDENTIFIER_NOT_FOUND' if in the file + there is an identifier that is not defined, 'ASN1_NAME_TOO_LONG' if + in the file there is an identifier whith more than + 'ASN1_MAX_NAME_SIZE' characters. + + +File: libtasn1.info, Node: ASN.1 field functions, Next: DER functions, Prev: ASN.1 schema functions, Up: Function reference + +4.2 ASN.1 field functions +========================= + +asn1_array2tree +--------------- + + -- Function: int asn1_array2tree (const asn1_static_node * ARRAY, + asn1_node * DEFINITIONS, char * ERRORDESCRIPTION) + ARRAY: specify the array that contains ASN.1 declarations + + DEFINITIONS: return the pointer to the structure created by *ARRAY + ASN.1 declarations + + ERRORDESCRIPTION: return the error description. + + Creates the structures needed to manage the ASN.1 definitions. + 'array' is a vector created by 'asn1_parser2array()' . + + *Returns:* 'ASN1_SUCCESS' if structure was created correctly, + 'ASN1_ELEMENT_NOT_EMPTY' if * 'definitions' not NULL, + 'ASN1_IDENTIFIER_NOT_FOUND' if in the file there is an identifier + that is not defined (see 'errorDescription' for more information), + 'ASN1_ARRAY_ERROR' if the array pointed by 'array' is wrong. + +asn1_delete_structure +--------------------- + + -- Function: int asn1_delete_structure (asn1_node * STRUCTURE) + STRUCTURE: pointer to the structure that you want to delete. + + Deletes the structure * 'structure' . At the end, * 'structure' is + set to NULL. + + *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' + if * 'structure' was NULL. + +asn1_delete_structure2 +---------------------- + + -- Function: int asn1_delete_structure2 (asn1_node * STRUCTURE, + unsigned int FLAGS) + STRUCTURE: pointer to the structure that you want to delete. + + FLAGS: additional flags (see 'ASN1_DELETE_FLAG' ) + + Deletes the structure * 'structure' . At the end, * 'structure' is + set to NULL. + + *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' + if * 'structure' was NULL. + +asn1_delete_element +------------------- + + -- Function: int asn1_delete_element (asn1_node STRUCTURE, const char * + ELEMENT_NAME) + STRUCTURE: pointer to the structure that contains the element you + want to delete. + + ELEMENT_NAME: element's name you want to delete. + + Deletes the element named * 'element_name' inside * 'structure' . + + *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' + if the 'element_name' was not found. + +asn1_create_element +------------------- + + -- Function: int asn1_create_element (asn1_node DEFINITIONS, const char + * SOURCE_NAME, asn1_node * ELEMENT) + DEFINITIONS: pointer to the structure returned by "parser_asn1" + function + + SOURCE_NAME: the name of the type of the new structure (must be + inside p_structure). + + ELEMENT: pointer to the structure created. + + Creates a structure of type 'source_name' . Example using + "pkix.asn": + + rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); + + *Returns:* 'ASN1_SUCCESS' if creation OK, 'ASN1_ELEMENT_NOT_FOUND' + if 'source_name' is not known. + +asn1_print_structure +-------------------- + + -- Function: void asn1_print_structure (FILE * OUT, asn1_node + STRUCTURE, const char * NAME, int MODE) + OUT: pointer to the output file (e.g. stdout). + + STRUCTURE: pointer to the structure that you want to visit. + + NAME: an element of the structure + + MODE: specify how much of the structure to print, can be + 'ASN1_PRINT_NAME' , 'ASN1_PRINT_NAME_TYPE' , + 'ASN1_PRINT_NAME_TYPE_VALUE' , or 'ASN1_PRINT_ALL' . + + Prints on the 'out' file descriptor the structure's tree starting + from the 'name' element inside the structure 'structure' . + +asn1_number_of_elements +----------------------- + + -- Function: int asn1_number_of_elements (asn1_node ELEMENT, const char + * NAME, int * NUM) + ELEMENT: pointer to the root of an ASN1 structure. + + NAME: the name of a sub-structure of ROOT. + + NUM: pointer to an integer where the result will be stored + + Counts the number of elements of a sub-structure called NAME with + names equal to "?1","?2", ... + + *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' + if 'name' is not known, 'ASN1_GENERIC_ERROR' if pointer 'num' is + 'NULL' . + +asn1_find_structure_from_oid +---------------------------- + + -- Function: const char * asn1_find_structure_from_oid (asn1_node + DEFINITIONS, const char * OIDVALUE) + DEFINITIONS: ASN1 definitions + + OIDVALUE: value of the OID to search (e.g. "1.2.3.4"). + + Search the structure that is defined just after an OID definition. + + *Returns:* 'NULL' when 'oidValue' not found, otherwise the pointer + to a constant string that contains the element name defined just + after the OID. + +asn1_copy_node +-------------- + + -- Function: int asn1_copy_node (asn1_node DST, const char * DST_NAME, + asn1_node SRC, const char * SRC_NAME) + DST: Destination asn1 node. + + DST_NAME: Field name in destination node. + + SRC: Source asn1 node. + + SRC_NAME: Field name in source node. + + Create a deep copy of a asn1_node variable. That function requires + 'dst' to be expanded using 'asn1_create_element()' . + + *Returns:* Return 'ASN1_SUCCESS' on success. + +asn1_dup_node +------------- + + -- Function: asn1_node asn1_dup_node (asn1_node SRC, const char * + SRC_NAME) + SRC: Source asn1 node. + + SRC_NAME: Field name in source node. + + Create a deep copy of a asn1_node variable. This function will + return an exact copy of the provided structure. + + *Returns:* Return 'NULL' on failure. + +asn1_write_value +---------------- + + -- Function: int asn1_write_value (asn1_node NODE_ROOT, const char * + NAME, const void * IVALUE, int LEN) + NODE_ROOT: pointer to a structure + + NAME: the name of the element inside the structure that you want to + set. + + IVALUE: vector used to specify the value to set. If len is >0, + VALUE must be a two's complement form integer. if len=0 *VALUE + must be a null terminated string with an integer value. + + LEN: number of bytes of *value to use to set the value: + value[0]..value[len-1] or 0 if value is a null terminated string + + Set the value of one element inside a structure. + + If an element is OPTIONAL and you want to delete it, you must use + the value=NULL and len=0. Using "pkix.asn": + + result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", + NULL, 0); + + Description for each type: + + *INTEGER:* VALUE must contain a two's complement form integer. + + value[0]=0xFF , len=1 -> integer=-1. value[0]=0xFF value[1]=0xFF , + len=2 -> integer=-1. value[0]=0x01 , len=1 -> integer= 1. + value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. value="123" , + len=0 -> integer= 123. + + *ENUMERATED:* As INTEGER (but only with not negative numbers). + + *BOOLEAN:* VALUE must be the null terminated string "TRUE" or + "FALSE" and LEN != 0. + + value="TRUE" , len=1 -> boolean=TRUE. value="FALSE" , len=1 -> + boolean=FALSE. + + OBJECT IDENTIFIER: VALUE must be a null terminated string with each + number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. + + value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. + + *UTCTime:* VALUE must be a null terminated string in one of these + formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", "YYMMDDhhmmss+hh'mm'", + "YYMMDDhhmmss-hh'mm'", "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". + LEN != 0. + + value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 at 12h 00m + Greenwich Mean Time + + *GeneralizedTime:* VALUE must be in one of this format: + "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", + "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", + "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s + indicates the seconds with any precision like "10.1" or "01.02". + LEN != 0 + + value="2001010112001.12-0700" , len=1 -> time=Jannuary 1st, 2001 at + 12h 00m 01.12s Pacific Daylight Time + + OCTET STRING: VALUE contains the octet string and LEN is the number + of octets. + + value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> + three bytes octet string + + *GeneralString:* VALUE contains the generalstring and LEN is the + number of octets. + + value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> + three bytes generalstring + + BIT STRING: VALUE contains the bit string organized by bytes and + LEN is the number of bits. + + value="$\backslash$xCF" , len=6 -> bit string="110011" (six bits) + + *CHOICE:* if NAME indicates a choice type, VALUE must specify one + of the alternatives with a null terminated string. LEN != 0. + Using "pkix.asn"\: + + result=asn1_write_value(cert, + "certificate1.tbsCertificate.subject", "rdnSequence", 1); + + *ANY:* VALUE indicates the der encoding of a structure. LEN != 0. + + SEQUENCE OF: VALUE must be the null terminated string "NEW" and LEN + != 0. With this instruction another element is appended in the + sequence. The name of this element will be "?1" if it's the first + one, "?2" for the second and so on. + + Using "pkix.asn"\: + + result=asn1_write_value(cert, + "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); + + SET OF: the same as SEQUENCE OF. Using "pkix.asn": + + result=asn1_write_value(cert, + "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); + + *Returns:* 'ASN1_SUCCESS' if the value was set, + 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, and + 'ASN1_VALUE_NOT_VALID' if 'ivalue' has a wrong format. + +asn1_read_value +--------------- + + -- Function: int asn1_read_value (asn1_node ROOT, const char * NAME, + void * IVALUE, int * LEN) + ROOT: pointer to a structure. + + NAME: the name of the element inside a structure that you want to + read. + + IVALUE: vector that will contain the element's content, must be a + pointer to memory cells already allocated (may be 'NULL' ). + + LEN: number of bytes of *value: value[0]..value[len-1]. Initialy + holds the sizeof value. + + Returns the value of one element inside a structure. If an element + is OPTIONAL and this returns 'ASN1_ELEMENT_NOT_FOUND' , it means + that this element wasn't present in the der encoding that created + the structure. The first element of a SEQUENCE_OF or SET_OF is + named "?1". The second one "?2" and so on. If the 'root' provided + is a node to specific sequence element, then the keyword "?CURRENT" + is also acceptable and indicates the current sequence element of + this node. + + Note that there can be valid values with length zero. In these + case this function will succeed and 'len' will be zero. + + *INTEGER:* VALUE will contain a two's complement form integer. + + integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , + len=1. + + *ENUMERATED:* As INTEGER (but only with not negative numbers). + + *BOOLEAN:* VALUE will be the null terminated string "TRUE" or + "FALSE" and LEN=5 or LEN=6. + + OBJECT IDENTIFIER: VALUE will be a null terminated string with each + number separated by a dot (i.e. "1.2.3.543.1"). + + LEN = strlen(VALUE)+1 + + *UTCTime:* VALUE will be a null terminated string in one of these + formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". + LEN=strlen(VALUE)+1. + + *GeneralizedTime:* VALUE will be a null terminated string in the + same format used to set the value. + + OCTET STRING: VALUE will contain the octet string and LEN will be + the number of octets. + + *GeneralString:* VALUE will contain the generalstring and LEN will + be the number of octets. + + BIT STRING: VALUE will contain the bit string organized by bytes + and LEN will be the number of bits. + + *CHOICE:* If NAME indicates a choice type, VALUE will specify the + alternative selected. + + *ANY:* If NAME indicates an any type, VALUE will indicate the DER + encoding of the structure actually used. + + *Returns:* 'ASN1_SUCCESS' if value is returned, + 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, + 'ASN1_VALUE_NOT_FOUND' if there isn't any value for the element + selected, and 'ASN1_MEM_ERROR' if The value vector isn't big enough + to store the result, and in this case 'len' will contain the number + of bytes needed. + +asn1_read_value_type +-------------------- + + -- Function: int asn1_read_value_type (asn1_node ROOT, const char * + NAME, void * IVALUE, int * LEN, unsigned int * ETYPE) + ROOT: pointer to a structure. + + NAME: the name of the element inside a structure that you want to + read. + + IVALUE: vector that will contain the element's content, must be a + pointer to memory cells already allocated (may be 'NULL' ). + + LEN: number of bytes of *value: value[0]..value[len-1]. Initialy + holds the sizeof value. + + ETYPE: The type of the value read (ASN1_ETYPE) + + Returns the type and value of one element inside a structure. If + an element is OPTIONAL and this returns 'ASN1_ELEMENT_NOT_FOUND' , + it means that this element wasn't present in the der encoding that + created the structure. The first element of a SEQUENCE_OF or + SET_OF is named "?1". The second one "?2" and so on. If the + 'root' provided is a node to specific sequence element, then the + keyword "?CURRENT" is also acceptable and indicates the current + sequence element of this node. + + Note that there can be valid values with length zero. In these + case this function will succeed and 'len' will be zero. + + *INTEGER:* VALUE will contain a two's complement form integer. + + integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , + len=1. + + *ENUMERATED:* As INTEGER (but only with not negative numbers). + + *BOOLEAN:* VALUE will be the null terminated string "TRUE" or + "FALSE" and LEN=5 or LEN=6. + + OBJECT IDENTIFIER: VALUE will be a null terminated string with each + number separated by a dot (i.e. "1.2.3.543.1"). + + LEN = strlen(VALUE)+1 + + *UTCTime:* VALUE will be a null terminated string in one of these + formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". + LEN=strlen(VALUE)+1. + + *GeneralizedTime:* VALUE will be a null terminated string in the + same format used to set the value. + + OCTET STRING: VALUE will contain the octet string and LEN will be + the number of octets. + + *GeneralString:* VALUE will contain the generalstring and LEN will + be the number of octets. + + BIT STRING: VALUE will contain the bit string organized by bytes + and LEN will be the number of bits. + + *CHOICE:* If NAME indicates a choice type, VALUE will specify the + alternative selected. + + *ANY:* If NAME indicates an any type, VALUE will indicate the DER + encoding of the structure actually used. + + *Returns:* 'ASN1_SUCCESS' if value is returned, + 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, + 'ASN1_VALUE_NOT_FOUND' if there isn't any value for the element + selected, and 'ASN1_MEM_ERROR' if The value vector isn't big enough + to store the result, and in this case 'len' will contain the number + of bytes needed. + +asn1_read_tag +------------- + + -- Function: int asn1_read_tag (asn1_node ROOT, const char * NAME, int + * TAGVALUE, int * CLASSVALUE) + ROOT: pointer to a structure + + NAME: the name of the element inside a structure. + + TAGVALUE: variable that will contain the TAG value. + + CLASSVALUE: variable that will specify the TAG type. + + Returns the TAG and the CLASS of one element inside a structure. + CLASS can have one of these constants: 'ASN1_CLASS_APPLICATION' , + 'ASN1_CLASS_UNIVERSAL' , 'ASN1_CLASS_PRIVATE' or + 'ASN1_CLASS_CONTEXT_SPECIFIC' . + + *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' + if 'name' is not a valid element. + +asn1_read_node_value +-------------------- + + -- Function: int asn1_read_node_value (asn1_node NODE, + asn1_data_node_st * DATA) + NODE: pointer to a node. + + DATA: a point to a asn1_data_node_st + + Returns the value a data node inside a asn1_node structure. The + data returned should be handled as constant values. + + *Returns:* 'ASN1_SUCCESS' if the node exists. + + +File: libtasn1.info, Node: DER functions, Next: Error handling functions, Prev: ASN.1 field functions, Up: Function reference + +4.3 DER functions +================= + +asn1_length_der +--------------- + + -- Function: void asn1_length_der (unsigned long int LEN, unsigned char + * DER, int * DER_LEN) + LEN: value to convert. + + DER: buffer to hold the returned encoding (may be 'NULL' ). + + DER_LEN: number of meaningful bytes of ANS + (der[0]..der[der_len-1]). + + Creates the DER encoding of the provided length value. The 'der' + buffer must have enough room for the output. The maximum length + this function will encode is 'ASN1_MAX_LENGTH_SIZE' . + + To know the size of the DER encoding use a 'NULL' value for 'der' . + +asn1_octet_der +-------------- + + -- Function: void asn1_octet_der (const unsigned char * STR, int + STR_LEN, unsigned char * DER, int * DER_LEN) + STR: the input data. + + STR_LEN: STR length (str[0]..str[*str_len-1]). + + DER: encoded string returned. + + DER_LEN: number of meaningful bytes of DER + (der[0]..der[der_len-1]). + + Creates a length-value DER encoding for the input data. The DER + encoding of the input data will be placed in the 'der' variable. + + Note that the OCTET STRING tag is not included in the output. + + This function does not return any value because it is expected that + 'der_len' will contain enough bytes to store the string plus the + DER encoding. The DER encoding size can be obtained using + 'asn1_length_der()' . + +asn1_encode_simple_der +---------------------- + + -- Function: int asn1_encode_simple_der (unsigned int ETYPE, const + unsigned char * STR, unsigned int STR_LEN, unsigned char * TL, + unsigned int * TL_LEN) + ETYPE: The type of the string to be encoded (ASN1_ETYPE_) + + STR: the string data. + + STR_LEN: the string length + + TL: the encoded tag and length + + TL_LEN: the bytes of the 'tl' field + + Creates the DER encoding for various simple ASN.1 types like + strings etc. It stores the tag and length in 'tl' , which should + have space for at least 'ASN1_MAX_TL_SIZE' bytes. Initially + 'tl_len' should contain the size of 'tl' . + + The complete DER encoding should consist of the value in 'tl' + appended with the provided 'str' . + + *Returns:* 'ASN1_SUCCESS' if successful or an error value. + +asn1_bit_der +------------ + + -- Function: void asn1_bit_der (const unsigned char * STR, int BIT_LEN, + unsigned char * DER, int * DER_LEN) + STR: BIT string. + + BIT_LEN: number of meaningful bits in STR. + + DER: string returned. + + DER_LEN: number of meaningful bytes of DER + (der[0]..der[ans_len-1]). + + Creates a length-value DER encoding for the input data as it would + have been for a BIT STRING. The DER encoded data will be copied in + 'der' . + + Note that the BIT STRING tag is not included in the output. + + This function does not return any value because it is expected that + 'der_len' will contain enough bytes to store the string plus the + DER encoding. The DER encoding size can be obtained using + 'asn1_length_der()' . + +asn1_der_coding +--------------- + + -- Function: int asn1_der_coding (asn1_node ELEMENT, const char * NAME, + void * IDER, int * LEN, char * ERRORDESCRIPTION) + ELEMENT: pointer to an ASN1 element + + NAME: the name of the structure you want to encode (it must be + inside *POINTER). + + IDER: vector that will contain the DER encoding. DER must be a + pointer to memory cells already allocated. + + LEN: number of bytes of * 'ider' : 'ider' [0].. 'ider' [len-1], + Initialy holds the sizeof of der vector. + + ERRORDESCRIPTION: return the error description or an empty string + if success. + + Creates the DER encoding for the NAME structure (inside *POINTER + structure). + + *Returns:* 'ASN1_SUCCESS' if DER encoding OK, + 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, + 'ASN1_VALUE_NOT_FOUND' if there is an element without a value, + 'ASN1_MEM_ERROR' if the 'ider' vector isn't big enough and in this + case 'len' will contain the length needed. + +asn1_get_length_der +------------------- + + -- Function: long asn1_get_length_der (const unsigned char * DER, int + DER_LEN, int * LEN) + DER: DER data to decode. + + DER_LEN: Length of DER data to decode. + + LEN: Output variable containing the length of the DER length field. + + Extract a length field from DER data. + + *Returns:* Return the decoded length value, or -1 on indefinite + length, or -2 when the value was too big to fit in a int, or -4 + when the decoded length value plus 'len' would exceed 'der_len' . + +asn1_get_tag_der +---------------- + + -- Function: int asn1_get_tag_der (const unsigned char * DER, int + DER_LEN, unsigned char * CLS, int * LEN, unsigned long * TAG) + DER: DER data to decode. + + DER_LEN: Length of DER data to decode. + + CLS: Output variable containing decoded class. + + LEN: Output variable containing the length of the DER TAG data. + + TAG: Output variable containing the decoded tag. + + Decode the class and TAG from DER code. + + *Returns:* Returns 'ASN1_SUCCESS' on success, or an error. + +asn1_get_length_ber +------------------- + + -- Function: long asn1_get_length_ber (const unsigned char * BER, int + BER_LEN, int * LEN) + BER: BER data to decode. + + BER_LEN: Length of BER data to decode. + + LEN: Output variable containing the length of the BER length field. + + Extract a length field from BER data. The difference to + 'asn1_get_length_der()' is that this function will return a length + even if the value has indefinite encoding. + + *Returns:* Return the decoded length value, or negative value when + the value was too big. + + *Since:* 2.0 + +asn1_get_octet_der +------------------ + + -- Function: int asn1_get_octet_der (const unsigned char * DER, int + DER_LEN, int * RET_LEN, unsigned char * STR, int STR_SIZE, int + * STR_LEN) + DER: DER data to decode containing the OCTET SEQUENCE. + + DER_LEN: Length of DER data to decode. + + RET_LEN: Output variable containing the length of the DER data. + + STR: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. + + STR_SIZE: Length of pre-allocated output buffer. + + STR_LEN: Output variable containing the length of the OCTET + SEQUENCE. + + Extract an OCTET SEQUENCE from DER data. + + *Returns:* Returns 'ASN1_SUCCESS' on success, or an error. + +asn1_get_object_id_der +---------------------- + + -- Function: int asn1_get_object_id_der (const unsigned char * DER, int + DER_LEN, int * RET_LEN, char * STR, int STR_SIZE) + DER: DER data to decode containing the OBJECT IDENTIFIER + + DER_LEN: Length of DER data to decode. + + RET_LEN: Output variable containing the length of the DER data. + + STR: Pre-allocated output buffer to put the textual object id in. + + STR_SIZE: Length of pre-allocated output buffer. + + Converts a DER encoded object identifier to its textual form. + + *Returns:* 'ASN1_SUCCESS' on success, or an error. + +asn1_get_bit_der +---------------- + + -- Function: int asn1_get_bit_der (const unsigned char * DER, int + DER_LEN, int * RET_LEN, unsigned char * STR, int STR_SIZE, int + * BIT_LEN) + DER: DER data to decode containing the BIT SEQUENCE. + + DER_LEN: Length of DER data to decode. + + RET_LEN: Output variable containing the length of the DER data. + + STR: Pre-allocated output buffer to put decoded BIT SEQUENCE in. + + STR_SIZE: Length of pre-allocated output buffer. + + BIT_LEN: Output variable containing the size of the BIT SEQUENCE. + + Extract a BIT SEQUENCE from DER data. + + *Returns:* 'ASN1_SUCCESS' on success, or an error. + +asn1_der_decoding2 +------------------ + + -- Function: int asn1_der_decoding2 (asn1_node * ELEMENT, const void * + IDER, int * MAX_IDER_LEN, unsigned int FLAGS, char * + ERRORDESCRIPTION) + ELEMENT: pointer to an ASN1 structure. + + IDER: vector that contains the DER encoding. + + MAX_IDER_LEN: pointer to an integer giving the information about + the maximal number of bytes occupied by * 'ider' . The real size + of the DER encoding is returned through this pointer. + + FLAGS: flags controlling the behaviour of the function. + + ERRORDESCRIPTION: null-terminated string contains details when an + error occurred. + + Fill the structure * 'element' with values of a DER encoding + string. The structure must just be created with function + 'asn1_create_element()' . + + If 'ASN1_DECODE_FLAG_ALLOW_PADDING' flag is set then the function + will ignore padding after the decoded DER data. Upon a successful + return the value of * 'max_ider_len' will be set to the number of + bytes decoded. + + If 'ASN1_DECODE_FLAG_STRICT_DER' flag is set then the function will + not decode any BER-encoded elements. + + *Returns:* 'ASN1_SUCCESS' if DER encoding OK, + 'ASN1_ELEMENT_NOT_FOUND' if 'ELEMENT' is 'NULL' , and + 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding doesn't + match the structure name (* 'ELEMENT' deleted). + +asn1_der_decoding +----------------- + + -- Function: int asn1_der_decoding (asn1_node * ELEMENT, const void * + IDER, int IDER_LEN, char * ERRORDESCRIPTION) + ELEMENT: pointer to an ASN1 structure. + + IDER: vector that contains the DER encoding. + + IDER_LEN: number of bytes of * 'ider' : 'ider' [0].. 'ider' + [len-1]. + + ERRORDESCRIPTION: null-terminated string contains details when an + error occurred. + + Fill the structure * 'element' with values of a DER encoding + string. The structure must just be created with function + 'asn1_create_element()' . + + Note that the * 'element' variable is provided as a pointer for + historical reasons. + + *Returns:* 'ASN1_SUCCESS' if DER encoding OK, + 'ASN1_ELEMENT_NOT_FOUND' if 'ELEMENT' is 'NULL' , and + 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding doesn't + match the structure name (* 'ELEMENT' deleted). + +asn1_der_decoding_element +------------------------- + + -- Function: int asn1_der_decoding_element (asn1_node * STRUCTURE, + const char * ELEMENTNAME, const void * IDER, int LEN, char * + ERRORDESCRIPTION) + STRUCTURE: pointer to an ASN1 structure + + ELEMENTNAME: name of the element to fill + + IDER: vector that contains the DER encoding of the whole structure. + + LEN: number of bytes of *der: der[0]..der[len-1] + + ERRORDESCRIPTION: null-terminated string contains details when an + error occurred. + + Fill the element named 'ELEMENTNAME' with values of a DER encoding + string. The structure must just be created with function + 'asn1_create_element()' . The DER vector must contain the encoding + string of the whole 'STRUCTURE' . If an error occurs during the + decoding procedure, the * 'STRUCTURE' is deleted and set equal to + 'NULL' . + + This function is deprecated and may just be an alias to + asn1_der_decoding in future versions. Use 'asn1_der_decoding()' + instead. + + *Returns:* 'ASN1_SUCCESS' if DER encoding OK, + 'ASN1_ELEMENT_NOT_FOUND' if ELEMENT is 'NULL' or 'elementName' == + NULL, and 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding + doesn't match the structure 'structure' (*ELEMENT deleted). + +asn1_der_decoding_startEnd +-------------------------- + + -- Function: int asn1_der_decoding_startEnd (asn1_node ELEMENT, const + void * IDER, int IDER_LEN, const char * NAME_ELEMENT, int * + START, int * END) + ELEMENT: pointer to an ASN1 element + + IDER: vector that contains the DER encoding. + + IDER_LEN: number of bytes of * 'ider' : 'ider' [0].. 'ider' + [len-1] + + NAME_ELEMENT: an element of NAME structure. + + START: the position of the first byte of NAME_ELEMENT decoding ( + 'ider' [*start]) + + END: the position of the last byte of NAME_ELEMENT decoding ( + 'ider' [*end]) + + Find the start and end point of an element in a DER encoding + string. I mean that if you have a der encoding and you have + already used the function 'asn1_der_decoding()' to fill a + structure, it may happen that you want to find the piece of string + concerning an element of the structure. + + One example is the sequence "tbsCertificate" inside an X509 + certificate. + + Note that since libtasn1 3.7 the 'ider' and 'ider_len' parameters + can be omitted, if the element is already decoded using + 'asn1_der_decoding()' . + + *Returns:* 'ASN1_SUCCESS' if DER encoding OK, + 'ASN1_ELEMENT_NOT_FOUND' if ELEMENT is 'asn1_node' EMPTY or + 'name_element' is not a valid element, 'ASN1_TAG_ERROR' or + 'ASN1_DER_ERROR' if the der encoding doesn't match the structure + ELEMENT. + +asn1_expand_any_defined_by +-------------------------- + + -- Function: int asn1_expand_any_defined_by (asn1_node DEFINITIONS, + asn1_node * ELEMENT) + DEFINITIONS: ASN1 definitions + + ELEMENT: pointer to an ASN1 structure + + Expands every "ANY DEFINED BY" element of a structure created from + a DER decoding process (asn1_der_decoding function). The element + ANY must be defined by an OBJECT IDENTIFIER. The type used to + expand the element ANY is the first one following the definition of + the actual value of the OBJECT IDENTIFIER. + + *Returns:* 'ASN1_SUCCESS' if Substitution OK, 'ASN1_ERROR_TYPE_ANY' + if some "ANY DEFINED BY" element couldn't be expanded due to a + problem in OBJECT_ID -> TYPE association, or other error codes + depending on DER decoding. + +asn1_expand_octet_string +------------------------ + + -- Function: int asn1_expand_octet_string (asn1_node DEFINITIONS, + asn1_node * ELEMENT, const char * OCTETNAME, const char * + OBJECTNAME) + DEFINITIONS: ASN1 definitions + + ELEMENT: pointer to an ASN1 structure + + OCTETNAME: name of the OCTECT STRING field to expand. + + OBJECTNAME: name of the OBJECT IDENTIFIER field to use to define + the type for expansion. + + Expands an "OCTET STRING" element of a structure created from a DER + decoding process (the 'asn1_der_decoding()' function). The type + used for expansion is the first one following the definition of the + actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. + + *Returns:* 'ASN1_SUCCESS' if substitution OK, + 'ASN1_ELEMENT_NOT_FOUND' if 'objectName' or 'octetName' are not + correct, 'ASN1_VALUE_NOT_VALID' if it wasn't possible to find the + type to use for expansion, or other errors depending on DER + decoding. + +asn1_decode_simple_der +---------------------- + + -- Function: int asn1_decode_simple_der (unsigned int ETYPE, const + unsigned char * DER, unsigned int _DER_LEN, const unsigned + char ** STR, unsigned int * STR_LEN) + ETYPE: The type of the string to be encoded (ASN1_ETYPE_) + + DER: the encoded string + + _DER_LEN: the bytes of the encoded string + + STR: a pointer to the data + + STR_LEN: the length of the data + + Decodes a simple DER encoded type (e.g. a string, which is not + constructed). The output is a pointer inside the 'der' . + + *Returns:* 'ASN1_SUCCESS' if successful or an error value. + +asn1_decode_simple_ber +---------------------- + + -- Function: int asn1_decode_simple_ber (unsigned int ETYPE, const + unsigned char * DER, unsigned int _DER_LEN, unsigned char ** + STR, unsigned int * STR_LEN, unsigned int * BER_LEN) + ETYPE: The type of the string to be encoded (ASN1_ETYPE_) + + DER: the encoded string + + _DER_LEN: the bytes of the encoded string + + STR: a pointer to the data + + STR_LEN: the length of the data + + BER_LEN: the total length occupied by BER (may be 'NULL' ) + + Decodes a BER encoded type. The output is an allocated value of + the data. This decodes BER STRINGS only. Other types are decoded + as DER. + + *Returns:* 'ASN1_SUCCESS' if successful or an error value. + + +File: libtasn1.info, Node: Error handling functions, Next: Auxilliary functions, Prev: DER functions, Up: Function reference + +4.4 Error handling functions +============================ + +asn1_perror +----------- + + -- Function: void asn1_perror (int ERROR) + ERROR: is an error returned by a libtasn1 function. + + Prints a string to stderr with a description of an error. This + function is like 'perror()' . The only difference is that it + accepts an error returned by a libtasn1 function. + + *Since:* 1.6 + +asn1_strerror +------------- + + -- Function: const char * asn1_strerror (int ERROR) + ERROR: is an error returned by a libtasn1 function. + + Returns a string with a description of an error. This function is + similar to strerror. The only difference is that it accepts an + error (number) returned by a libtasn1 function. + + *Returns:* Pointer to static zero-terminated string describing + error code. + + *Since:* 1.6 + + +File: libtasn1.info, Node: Auxilliary functions, Prev: Error handling functions, Up: Function reference + +4.5 Auxilliary functions +======================== + +asn1_find_node +-------------- + + -- Function: asn1_node asn1_find_node (asn1_node POINTER, const char * + NAME) + POINTER: NODE_ASN element pointer. + + NAME: null terminated string with the element's name to find. + + Searches for an element called 'name' starting from 'pointer' . + The name is composed by differents identifiers separated by dots. + When * 'pointer' has a name, the first identifier must be the name + of * 'pointer' , otherwise it must be the name of one child of * + 'pointer' . + + *Returns:* the search result, or 'NULL' if not found. + +asn1_check_version +------------------ + + -- Function: const char * asn1_check_version (const char * REQ_VERSION) + REQ_VERSION: Required version number, or 'NULL' . + + Check that the version of the library is at minimum the requested + one and return the version string; return 'NULL' if the condition + is not satisfied. If a 'NULL' is passed to this function, no check + is done, but the version string is simply returned. + + See 'ASN1_VERSION' for a suitable 'req_version' string. + + *Returns:* Version string of run-time library, or 'NULL' if the + run-time library does not meet the required version number. + + +File: libtasn1.info, Node: Copying Information, Next: Concept Index, Prev: Function reference, Up: Top + +Appendix A Copying Information +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual. + + +File: libtasn1.info, Node: GNU Free Documentation License, Up: Copying Information + +A.1 GNU Free Documentation License +================================== + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + <http://fsf.org/> + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + <http://www.gnu.org/copyleft/>. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: libtasn1.info, Node: Concept Index, Next: Function and Data Index, Prev: Copying Information, Up: Top + +Concept Index +************* + + +* Menu: + +* ASN.1 schema: ASN.1 syntax. (line 6) +* asn1Coding program: Invoking asn1Coding. (line 6) +* asn1Decoding program: Invoking asn1Decoding. + (line 6) +* asn1Parser program: Invoking asn1Parser. (line 6) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* Future developments: Future developments. (line 6) +* Header file libtasn1.h: Library Notes. (line 6) +* Main type asn1_node: Library Notes. (line 8) +* Porting: Introduction. (line 32) +* Supported ASN.1 types, list of: ASN.1 syntax. (line 38) +* threads: Introduction. (line 29) + + +File: libtasn1.info, Node: Function and Data Index, Prev: Concept Index, Up: Top + +Function and Data Index +*********************** + + +* Menu: + +* asn1_array2tree: ASN.1 field functions. + (line 9) +* asn1_bit_der: DER functions. (line 77) +* asn1_check_version: Auxilliary functions. + (line 26) +* asn1_copy_node: ASN.1 field functions. + (line 144) +* asn1_create_element: ASN.1 field functions. + (line 72) +* asn1_decode_simple_ber: DER functions. (line 453) +* asn1_decode_simple_der: DER functions. (line 432) +* asn1_delete_element: ASN.1 field functions. + (line 57) +* asn1_delete_structure: ASN.1 field functions. + (line 30) +* asn1_delete_structure2: ASN.1 field functions. + (line 42) +* asn1_der_coding: DER functions. (line 102) +* asn1_der_decoding: DER functions. (line 286) +* asn1_der_decoding2: DER functions. (line 250) +* asn1_der_decoding_element: DER functions. (line 313) +* asn1_der_decoding_startEnd: DER functions. (line 346) +* asn1_dup_node: ASN.1 field functions. + (line 162) +* asn1_encode_simple_der: DER functions. (line 51) +* asn1_expand_any_defined_by: DER functions. (line 386) +* asn1_expand_octet_string: DER functions. (line 406) +* asn1_find_node: Auxilliary functions. + (line 9) +* asn1_find_structure_from_oid: ASN.1 field functions. + (line 129) +* asn1_get_bit_der: DER functions. (line 228) +* asn1_get_length_ber: DER functions. (line 166) +* asn1_get_length_der: DER functions. (line 130) +* asn1_get_object_id_der: DER functions. (line 209) +* asn1_get_octet_der: DER functions. (line 186) +* asn1_get_tag_der: DER functions. (line 147) +* asn1_length_der: DER functions. (line 9) +* asn1_number_of_elements: ASN.1 field functions. + (line 111) +* asn1_octet_der: DER functions. (line 27) +* asn1_parser2array: ASN.1 schema functions. + (line 35) +* asn1_parser2tree: ASN.1 schema functions. + (line 9) +* asn1_perror: Error handling functions. + (line 9) +* asn1_print_structure: ASN.1 field functions. + (line 93) +* asn1_read_node_value: ASN.1 field functions. + (line 453) +* asn1_read_tag: ASN.1 field functions. + (line 432) +* asn1_read_value: ASN.1 field functions. + (line 286) +* asn1_read_value_type: ASN.1 field functions. + (line 358) +* asn1_strerror: Error handling functions. + (line 21) +* asn1_write_value: ASN.1 field functions. + (line 176) + + + +Tag Table: +Node: Top861 +Node: Introduction1851 +Node: ASN.1 structure handling3220 +Node: ASN.1 syntax3479 +Node: Naming5067 +Node: Simple parsing6048 +Node: Library Notes6375 +Node: Future developments7157 +Node: Utilities7456 +Node: Invoking asn1Parser7676 +Node: Invoking asn1Coding8138 +Node: Invoking asn1Decoding9875 +Node: Function reference10630 +Node: ASN.1 schema functions10914 +Ref: asn1_parser2tree11113 +Ref: asn1_parser2array12164 +Node: ASN.1 field functions13482 +Ref: asn1_array2tree13699 +Ref: asn1_delete_structure14551 +Ref: asn1_delete_structure214925 +Ref: asn1_delete_element15380 +Ref: asn1_create_element15852 +Ref: asn1_print_structure16506 +Ref: asn1_number_of_elements17135 +Ref: asn1_find_structure_from_oid17730 +Ref: asn1_copy_node18208 +Ref: asn1_dup_node18694 +Ref: asn1_write_value19054 +Ref: asn1_read_value23088 +Ref: asn1_read_value_type25878 +Ref: asn1_read_tag28743 +Ref: asn1_read_node_value29450 +Node: DER functions29796 +Ref: asn1_length_der29999 +Ref: asn1_octet_der30585 +Ref: asn1_encode_simple_der31393 +Ref: asn1_bit_der32223 +Ref: asn1_der_coding33014 +Ref: asn1_get_length_der34037 +Ref: asn1_get_tag_der34577 +Ref: asn1_get_length_ber35122 +Ref: asn1_get_octet_der35715 +Ref: asn1_get_object_id_der36422 +Ref: asn1_get_bit_der37020 +Ref: asn1_der_decoding237693 +Ref: asn1_der_decoding39091 +Ref: asn1_der_decoding_element40030 +Ref: asn1_der_decoding_startEnd41337 +Ref: asn1_expand_any_defined_by42789 +Ref: asn1_expand_octet_string43594 +Ref: asn1_decode_simple_der44595 +Ref: asn1_decode_simple_ber45237 +Node: Error handling functions45938 +Ref: asn1_perror46154 +Ref: asn1_strerror46495 +Node: Auxilliary functions46906 +Ref: asn1_find_node47098 +Ref: asn1_check_version47694 +Node: Copying Information48293 +Node: GNU Free Documentation License48546 +Node: Concept Index73661 +Node: Function and Data Index74767 + +End Tag Table diff --git a/doc/libtasn1.pdf b/doc/libtasn1.pdf Binary files differnew file mode 100644 index 0000000..e988718 --- /dev/null +++ b/doc/libtasn1.pdf diff --git a/doc/libtasn1.ps b/doc/libtasn1.ps new file mode 100644 index 0000000..3c10f98 --- /dev/null +++ b/doc/libtasn1.ps @@ -0,0 +1,8345 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.995 Copyright 2015 Radical Eye Software +%%Title: libtasn1.dvi +%%CreationDate: Mon Apr 11 08:33:50 2016 +%%Pages: 36 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMTT12 CMSY10 CMMI12 CMMI10 CMTT10 CMSS10 +%%+ CMSL10 CMSLTT10 CMB10 CMTT9 CMR9 CMMI9 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -q -o libtasn1.ps libtasn1.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2016.04.11:0833 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 +def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 +rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 +N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop +false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A +length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} +forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ +BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat +{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch +round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 +rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B +/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} +B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p +-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ +0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginFont: CMMI9 +%!PS-AdobeFont-1.0: CMMI9 003.002 +%%Title: CMMI9 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI9. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup +/UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMMI9 def +/FontBBox {-29 -250 1075 750 }readonly def +/PaintType 0 def +/FontInfo 10 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI9.) readonly def +/FullName (CMMI9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +/ascent 750 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 +45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 +7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 +72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E +BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 +974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 +11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB +7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 +7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 +BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 +82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC +E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 +91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E +540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 +7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 +93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D +EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 +972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A +6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 +796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 +DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B +D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 +E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D +0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 +F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 +ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 +72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F +F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 +4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 +692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C +BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 +4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 +CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 +41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A +9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 +5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 +2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 +8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B +33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 +03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 +749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE +CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE +3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F +64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F +90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 +DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 +F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D +4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF +49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 +E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 +58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE +88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 +B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE +7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 +01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 +19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 +194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 +53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 +F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 +412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 +C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC +C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 +4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 +E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 +AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF +00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A +E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 +C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC +B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 +2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 +F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 +0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 +28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 +E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A +C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 +20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B +7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE +5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 +74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 +90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 +3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 +98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 +54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 +93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC +19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A +9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD +E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 +A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB +107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA +5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 +22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 +B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D +403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 +D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 +20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 +943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 +AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F +A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 +B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA +2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 +2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F +E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D +E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F +8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 +87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 +2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 +D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC +512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 +4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 +6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 +9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A +0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 +9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B +FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 +430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 +56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE +718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 +F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE +95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B +EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE +6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 +6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 +630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 +6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA +89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 +3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 +90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 +38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 +EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 +B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 +9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 +1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF +1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C +62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 +84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 +AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 +D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 +BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 +4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 +531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 +FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 +43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 +D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 +0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 +E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 +DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 +99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD +8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 +8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 +A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 +362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 +C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 +E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 +07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F +0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 +190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 +5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D +F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 +005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 +6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C +D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 +F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 +F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE +2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 +F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 +0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD +73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 +62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 +5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 +F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F +6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 +DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 +EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 +E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 +536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 +36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF +B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 +F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 +431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 +5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C +074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 +E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 +2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 +324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F +FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR9 +%!PS-AdobeFont-1.0: CMR9 003.002 +%%Title: CMR9 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR9. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup +/UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR9 def +/FontBBox {-39 -250 1036 750 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR9.) readonly def +/FullName (CMR9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 44 /comma put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 80 /P put +dup 83 /S put +dup 85 /U put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 +15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E +ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 +B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 +85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C +DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 +F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D +2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 +B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 +78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 +E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 +41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 +B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 +55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA +700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 +8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A +F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 +FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 +3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 +B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 +AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 +461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC +CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 +CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C +4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F +291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 +D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 +C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 +D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 +9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 +2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 +A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB +2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E +2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 +AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 +9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB +B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 +0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D +9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B +42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 +C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 +623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 +B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 +E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 +CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D +07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 +53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 +EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 +52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 +F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC +D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 +81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D +B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 +B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A +31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF +E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 +846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 +46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E +44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 +A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A +BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 +1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 +D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 +6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A +E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E +24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E +75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D +EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 +C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 +5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 +099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 +7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE +53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 +7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F +7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C +D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 +CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD +866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B +B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 +ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B +B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 +FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B +40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 +D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 +2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 +39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 +1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 +F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 +253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B +14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 +6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E +E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B +9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E +EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 +FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F +289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 +A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 +5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 +5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 +152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE +67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 +BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 +3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 +713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF +2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 +D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 +6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB +A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 +F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 +26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A +C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 +350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 +70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 +F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 +F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 +9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 +DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 +F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D +064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF +1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 +A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E +E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF +01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C +40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C +72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 +24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 +EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 +D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 +83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 +5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 +1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 +AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC +4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 +7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 +65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 +B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 +FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 +4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 +8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 +1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 +10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B +C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 +8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A +C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 +7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F +852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C +3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 +648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD +855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE +1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C +1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 +B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 +D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 +24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C +552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 +6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 +800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 +6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 +E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 +5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 +00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F +E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 +82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 +6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 +128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D +744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 +84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF +AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 +5D24AB1323A0BDCC0A8FCCAD408E091D37B62D3D1BF8537CFC619A78488DA0CF +87FF97E3181A579D373539E8AFF22856FD03F4C387BA307983EDE87FE0F320FF +41E45F60704B913C7381D84E98411045E4AC9FFDF8168FA2286D8C7EBF681EA8 +787E7960CFCAF502B7A3066310BE7A1159A02F1BF2C5C11A3A9A52E01DE3E108 +8ECF6C9F892370DE073A17C26D92487DC47818C92555B5FA22B8E2D726EBDC07 +7B0E0DBF8060AEAD5106824D748D9C085BAC95E031069395B41D5BB131FCDAFB +5CB678DA317AA3082296487B40E1D4297E22905E096C47A26F4DF5975ED35156 +F33D505FE3ED168177598CA0CE444A03F66032BD7D1C1ACA0EF9FC36C4C9CE25 +C9B1F2420CF9A96365BAA62E2704F2C662090D58BB4E0B099DDB4EEBF8D05F97 +A5CBC658236F5E4D62BAEFB5996AB9E8EC4F4F9AC53FF17CC7A87BF1B8EC4626 +1C500327CCB89B0EB07A9F4903E0C5A5E7370D90B50C010286EB368B0503D038 +A2EF77A39178507E41DBE433DF19D3F69A70793D051F813CD263B5DA690579AC +1789D2D4CA15488F73F1F01CA8FC188FA30CB08809D8228AAC5A10954A6E5471 +F8D84AF40CBD5C92F789EB1742E17D5EF1F7212D71A06BD7091360023093F101 +36EB44A8DE87A4A196B0140641000B445FD8F603A9A7F2C6F77EF6963811F7C9 +15649EE1D81DC3E988A7A797D76DB89758A73428D690AAC6CAF6E216CA40F8C6 +2E05352428D4C5BDF539C8E423815555A1051370EFB3A9606D3D58F46E7D0B97 +CCA0C589D0E36D25CE3938B059FB0E2C8361014B57098F96088C5C98E7AF24CF +F8A8308EA440CD67106B94310E4C81D9D739DF88C655165C148CA55C7A1E2F7E +A6F673ED5F34F1C1D20B609A152EDECFA26875C005B5D3394AFC2E2FC73EC0D8 +693A9561AD2C3F9B9E9C94C53ADDD85AF53C31B80C1B952D9DFDD486216B5470 +4294478B4C661D4A4E9FA155F8AEC542E9824B68E6CE5EA8AC69ADBF68EB3D17 +34B6A9696D4C6CE733DAE0E07696962EED3A3A13C4041ADC5F52005EA6134A66 +F51F736877EF6935620706F1C7F6D4391BBA261C0A456437333F630E77FE0351 +524E0228494AE590925549D708865836B98C22DB4B3DDC0B03B7AC91452ACC9A +A35B5300C6AD185B4115777FF1887C18E2A8D7197B0F7D20C6783F1ACAEF307D +3A3D8A0CA6E668E9686C074CDB097FE2EE3CB1633A72BC1E72A5F984675CA442 +44BE2B6DA017CC81B0402ADB03580FEDC3E27F17BB92A3AF2F2A94D9355ECCF6 +100298E5BEAA35E237A6377AF642F9342CA7B1395A06C40BD8009CC6A8448523 +E4FB6152AB32DC44649E9CA36C02A450B982E0AE37EF099A4DAB23C856C986AD +FEAA0B463EFDF2934B81739E6EE4DAEEF6E7CC0ED6A45B7F628AF18546E746ED +2F6A256953F207A7A6C9DD70F51DDEE2A9AA21F29C260D73AD90ED18C0460515 +0D9B3A9D82BE7DA27A34D0A23A3CAE652858FC87D056998142D7125BCB55D9FF +7B893CC31F7949ADAFA7FD22C8F9537DE6D5AF5C6EA86933F8B05B923630AF9F +932D151B0B3E8667D726E21D32EDD1B93AEA254F7742B0626117F71AD443B5F3 +E244ADDB741168B14285868040702DB2339BF7DF2E553AA9B765C965D6911982 +4B157A2FADC6FD33E9B0E6741B843611735C86E03CCE6750FD21CF6C091DEE5E +FECC8B1D3B1C4B27C8709EECEDE568036854398EB687A52E1E15CCF8481B4169 +D825AAC0866A01B77B5DB834161B4CD9385A5A7186B75648703EB60E90F27338 +24306CE505EBA5B75AE6563CDDAC46DE844726A222F8E7995239C70F9A781725 +9964898D854B87711D7D6290DD4760DBC11157156B0E2E20CEDB0A5814B5BC4F +BD587F14DB25055F0CE7BA4C3F2AD371F10BA0FC4C1BD496258350CDB97056F9 +FCB96071835E56BF1D384A44FB411C043ADC0B94FA3370BE0617216EB4ED64CD +18471A493D5F4CF3863FD2408A3180229FA3AC3AA762A8A88C2E79E277AD698D +2F2FE368F51654EF912AB5C92989675EC9E0A818C9ED94A71DBE46014A352D4D +916368BCB4152454BD9D5DE9D002DEDF2FF6342EA28A436EAFCAF9102A25E5F0 +47CC8473EC2AC8E4B2C2C0E8BF5DBA1C7EEE0BF66C206D543D9F4C412CB128CE +57F60B0D5EF70270B40D4EFDAA421F4059C474F61319A9C0B0BB98EAD3B5ADAB +B830C68513A5DFAAB3A29363889DBA63C13F646A21F005F985B4BAB5F16FED1D +B8A81E4164F827F359A4630C2955964D0D8088408A3E376555159AE9BDA25911 +5AE9A1445AE2A9CA93F73B047C8E669D29DD9BF99B3ECC3B24B56EACBFDD1F93 +A6800310FF9AFEBCB6AF6A97107FBBA08DFB4C48A30C24D13B30CA0BD0790FF3 +8C7BF80A1721B36E82428DA07F52E69E4370442D6C28DE1FC1560CC93DE2B34E +A544E3DA352DEC39D0DD73AE3F8A22299AC83A56F2D0A289D4CFD073A0A3E9C5 +22649BB893E0FDDA363F4543D60590D9CFEDB389FC57DFC352A86FEAB3030F33 +647818D10537C66A0EDFBC956B7448512F12D228F1E6CEDEF1CC8BA5D2CC9FCC +EF56AC106082AFBC7C33AA5AA3A5F74816562B18B15A72DFA22E53AB387F6F55 +81E7A55FC1FF18C49EA9C747626EA2CD8FE45998A2200B201A15701791D5943B +61A6EBC0487B07FF578EE8CD2CE2B4CF0118BC31A1EB064F3BA5770D9D6ABE3B +980FAE493351448D8CEE5D7A01BCE562BF10CD298038522A0D75A6D0B597724C +53AD288C60521B13572393735AC27E705A6BC0BE25ACFA16A3B6075F1D04CDBE +0540416BD8B26A3BB4A9D8774A3000FFA9477E051D943562E3B9EE8911AA8B94 +940E1F4E493CFEE1C6C5D90BD37ADA86614B9AF52CC8105D836ECA2AAF91EDF2 +530F0529C6D8F19269C314967DD567EEA133DF88DB64327D446FF0212FCC07C7 +72ACBC7A0A254BDBC3A08CA81A20CFBB26838AA2828DC8A69C05C8414B8ED70B +75A3E2B72E8591A5E1D5B944B8FFAA59E1742A2AB9401919FCC947F81DFCD331 +BAADEC41BEE83FEB705ACD7E9C0B9BB3F2B0419BD82297251269765F4B620CB9 +036B00E305A703A3AB78546BFE29DEB9BA7B5395D75493A2FF6B8B3B67CF5A07 +0A10EC484D74B359BFB7E71F5BCC1D4FF658FB34C55E5D0338D3FD5F788EFF7C +6425857EA25379430E12F1F63D7640D3C9E38603EBA4A11F13AD42E41F704581 +551DD05C638A30F8B4EBF5F8B6206FCEDFED42B5B689C7F102D9D09F03B04788 +FED13E7CEA6134A544E5DD874C32705EF99EC771C5A5FF2498C0D2C58390930A +96DCC10569F5575CD03C046E071BD75320E0C64AD0D4B6FCD0B228A3128E675B +CC3AD244DC7B873D1DF85F196BFDAE905100C987975A7D8ECDC4BD5FB580D025 +01B3FFC0D277177A27BB43537251C9296C2100009DE18D807EC3D57A1C81A1C8 +7041972DF0A32A0C3A5BC386F71C169A6735162606D251EA7811B893B9A65E87 +0930D2B0F81EE86A3F13BB3679BC7D0EE881D461F04C7090FA5CBAD034A75C78 +C5D044AAEF0554832C59F6FCC0C296BD1117D2ECD7059B975D2BF9BE05E48D4A +02A380C71ADBBCF356F1BCD9A99F64627B7AA7F492E93E4E9A7C6CF85FE63F09 +E6FF5B7F9270933D8B167D25C856339038A338FFB01251F723BE4A8F671A23F8 +31F0CE94575A7CFCFE93A021B1798908F72D1B78654E35D8695DC1904A396C6F +C02C903D5D6BE52687CD39533543DDD22338ED2941F1821F5C3110501B55A71E +F69983E9DA01E7CB967B31A44EF56EEFA5C394C4A1068A4AA40A08EA39FE35B4 +5EAC7164E93F84B80275AD080C4BC34D560FB2B29AE900DACF0DC5184C9235D1 +2BD92B31ED15ED2A6919143453F3ABBF70B5657F1F3BFE97412FB42F70DB3D61 +3DFAA7C0EF9D7FE6A4F783485647EDEF954ECEBFB633E45E6D47290DD967805C +FCA6353D14BED1445083CB2BF453995B6C57D77B763B5C8F93E7FCDC15145F70 +0EDBB5FF2F1ADA0B10453FC4DE754DA25261434EC57D6002846CC79951FBB211 +B0FDFCEE5105C6005EE478E6198A7C06CCD709AC6FA8E54F2432F57EBEF4E658 +C25FF7DAEF0B65EF65424ECDD2BFCD831CC1C3C708FD24BD45BE97A9D4A74F91 +4AF903B8A897B46E14EFFEE5CB7C9CD27B1D311C994524A5D880A4948ACDB3E5 +141A16B5574BDFEA5B172C0C4279189DF348C515DA4426C092F69729A7B17F4C +246163859962178FC305672D6A625DF5B7AB93B1C3BD5A607CA04AF4A1452AC6 +0B8B38C006D1B766B078C4399BF86B2D41574384B1EF37AA1B987124C4587DC9 +6EF5AB8B02585D925DCA1B36148CD513A1B47A3F4272017307BEC08FAEBA3452 +531075B36A05E2FCC900E7ED592B9B8867E0F5F677C72E6CDA1458BC8D05E024 +11323238C0921BAAFD46B87DB328AE59A9095AE876E5C0199FBBC5D697A34E6D +8F20F709F5E94D0E7E2DB8A36F53C74405C7737ECB543FE4C35ACFD212B25492 +3E5DBDA4274C755F56508EF0A00B4A5FB496C4B8D82113B3ADEC9E1AF9AAFC32 +858AC0B6998248ADB0FC3560D0C144D24AF6480C6009EABA9700FB0CB881451A +5DABC2CE6A2B4FD6D138BE6B9248717C6CEB8CE6850CDFC1F666C0202046B6D5 +9407D14D60862AAB2F2A6653DDD05AEBDAC0F9EFB53AA6AD4A5AD9E0A8A41EF1 +A3F9E2683A1F5B987348EBA05647DB91B3D0BC34B0B59C171118DF9BED1F38E9 +8CB8C3F8A586F56F387E2B40A2096C87AD5ED5110064BD1116F753E7C03FB4EA +C8582F2F7DD2C267161103CEFDA79D131D3A632278209CD9D611A4B1A65368BD +534984BD9B8D74D122A08106D8713830B6F303A806CCDC5C88B18C5F92E20B95 +07E0F04AC62E003848EAB97DCDCB43BE9FCC06C8F0CCE00D2297569222B19B8C +2718E26C1F7D57C4B7F4E7B088306BDB1E2C91571B1CF6EE988F155EB2BE1965 +1F646417DA862C48583B395D0122AB642BB6F4DF684FDC70007F7C8E2401F5F8 +1D13ABBCE9E981D46EC65D1F92A3CF1D13DEF2A525B13734F3D60469D57496E1 +4851CBBC9A49408580D718665CD043F39A1F86F8DC6F52C44361FEB0D80E9FEF +F06C758AA6FE965ED042A27A7EDDFA0FF748252068422010F8666F53EF5AF748 +DBAA54405EF9ED986F9F98A54B3325C87A47E1F358D0A8B5BF559B6C775E75F2 +0948B50B3AC74B3F87D65E7EC856C35BC3C3B4C1984F27A79BEF093BF9AB9B98 +EC589A00ACDE0AD5847DCA9DB3621C44403E714C881A05F55D9E7504BBA15ADC +37C89A7BF2A239CB02C17FCC1069527F86261B411A18F36ED64DEC101C35E534 +A809987F682C28DEC6D00A04F0D6AAE12DC5A898D47DF5DBDC11B59C69749E8F +5FB2E5D2F5092361C360752046D9CA4786EF07B4F3942FE255D1ACCB6B3E2088 +1802925738CDBE31550A683D4CFAE8751664506DD9797894FBECF81DDE61106B +A158E0B46CDAAA2F321A1E276835162860FD8B2E0167ABB3C7B3242A800F8407 +26E3D08380D7FB3B9D1D9651CEB60A2FFFC58673064FA240F04D6B7EC86EB4AE +47B0D0FE41D039CFA872E74845BA09C40D5374B218BBEB4C89F92C7B33B529C7 +5081EF37095DECC6BB88A1CC5E64E32A94C5AD2575F952E5E4D97D3CB759D222 +F79AD602DCDD04AC16EF772A99ABDF5832A1E38477E0240682B9E1EC74174B5A +9C9F918669796F583D2CD2453584F42D84CE0DA43179E4FCBEF9071B19F307DB +F44554FE434FABBF6D6D1DB10F7792A060475A9F4D4B16E2C670FB8AEAF8D055 +2973659344D0B7C76FF21D5CB40278DD9210EE8A62634D1CA996BCEE95F77B14 +0C4E1569EABF70176D3D43C75BE31EBB33F6545E3BC85EB688E643A05E6EBD51 +2F997D7955ABFDA3CEECDCD6110C8FAF0383EE50C2F418E45769287BCF153F85 +7ED1B2DDF33065018575FC28B9C746B9A1BDB182D2411CA7442E8B86861DD800 +BDF1D45793F8563A3B559EDBFBE8DBF2232AC8CFEA5B84BA2DA15F7E9B196DC1 +979B4DAEC9A3D28BD9802532D6CED80432EAF850634E90DCD8C431CECDE213D6 +BBBA8143A90227A1169AE78069213C2120B27134C9AA21C64ACF5A1305C03857 +35D640D2E3E08BE86D9700174FAC3AF3C0C401937812E42006EC08E0C71983C7 +0B50F78122A167C5D1632E344FE011B121EEC247CB77165706ECDBA76F11097F +BCA6237820C2E8DF105907B2816CBC970A4777DA8B22278237AE2AEAA7228A93 +AA96C976F5E766053FE61DD832E6F9E4511C67D4FEB20AA5DC6AABED295E8AF8 +747F75C718981EFAD0992618A8926590EB02BABBB1CE8853D7312D81253DA4DD +0550F21FB558BD9405CF0689918BE2927C2F428A324530560B8AD86DAD1DA6BA +7863528F4C7E9F9D92CC3E04E57E1C1B929CAFB9583F7B0C8306FC256F6896B9 +89642D8E61B65DF6CA998E52F826331A363B787F3A532D97DC002BC5B5EF6CA0 +F352C2FF69F7EA510B574DE3E5BDE03FA365C8CBCCC8515766997F821BD4CE85 +282DE60C3A93C153353CA8DA4F7DE805D0B9A2C77183F45B40C62E1E511470A1 +E7645850CD18B3174AC45EDF31FEFB8672E4D6F740674E208AFE9DCDE3BFAB61 +4BE0E6E4ED3B2B1C4617FB6DEF15130C6816AEC54244D0F825C9C7919B5A16B2 +4688B45C5B4B7C48491442C11B86E5E2E94FC7FD8BCC462306FE11E6AD43B431 +FD0A6093386DA78B12DC09B07E68256BA4CA7038E08A15D41EF05EB0D7BB7A01 +6EDF907D9D813FD567AF255F05ADCCC8B197D025B2D2F1B1EE2EAE446B5E210D +28404EB952843FB9902D5EBDB7BC162BF3064606C07AE9435FF315A9DB803AF7 +E0156B7431CFB6995F3FD1586CC5964C5E4E261CFD6FDD2E8EFB29740CFC4BBA +1A6A7E619B6399B99EF06126146DE30FF6814E261B4445E180144BFE7C92181C +6CE7A52756D9482D7AE3F2CF3082BBA123796C7624AC1C793363EF77930044DC +3966389C117E4803DA46D59525CF0DD10E910FEA930952401DEABAB305498FB5 +AF1E8018900D50B6DCBD883DCA94DEFE042CAF00E8C1DC261F4474108F2ACF96 +F4512E7D0362843BFE4EA9F15C5ED3B3C27AA9971D3651DAD1BF0FC339A76B09 +1A5F45459D8CA1285BDDA77A6A59F8D4DD81CD19CDACC7D66FA1841800AD0479 +45D70B2D146D57E765C86612FAFAC2AED07DBF4C7CBB1DDF840363F821869AAB +CD91AC7648A6A898762408FD7A17993C173D78CA38B27E7EE6C7EC1380ADB707 +11C1AB09F03E2DEBAF55968B232F45E4BBF2CCF2DECC0BEA681BFE96A1D3974D +9EA36FA5B00D9E659371593044487E92AEF37474C940B3A4EC26E497B451DEE4 +028CBDFF61EACE96FD74DFD7799F901FD6681B385969BA497133B052A90420F4 +6D0A138EA47833B6FB3501052BAF8A7F3BD62AB4B0ED06A694F778D261BF2215 +A027BED793CE8D4BF9B4DA153813DA70A207EF712534929058372C0BB5B7B516 +20BCD0BFCBC338E8EC70AC841CE44EF460CFA687C3890EA068545A62D8307E6C +7017C6046D1E4C2528C6A99D51528DDCFEC132F4BDBB007E63D4B1F045FAC208 +6C39C9616A63118A600F83AF3FA335889635F7C2751A521806DF8305E220AD26 +3657D3C4DB43B1E6247D0D541CF9FB55D8845DB1B2CEA75DE0899E900A250C43 +2B9104CAF040526F5463BAABDDC9A0222CAB87108415BEEDE2972D7E2720897D +E41E3D806A118BC0FD0356088482ABE043DACD5E0301310BC1047358740E5B10 +C7EFCC8F2DB61273058AAB5173D414C97D3F18701E78C6294BA5A3FE0CAC4003 +86311A6466EAB7ED99EAE360795F32359233F93C017CC318A960BB9162238E2E +2C16BEB936E00FC3AF0C5626AA76470D4B87F921572FABDA2FD810951E80B674 +56928C2140038F0486DAA7874423A738716E882F16A0C72CD2A5DAEA1530FDB1 +736CE88270A96AFA2A1D77B7FD9F64E7D39A78CA88C2846AA558DA3D2595457B +98625043FD6E2F87F71973BB88FF5188EAAAAFDCDC7FC403D5F8BAAD045E888E +03BB9B8F721F003FD3A7EB9FA1AE1761E236E11A7BC3F2E6E100CD3C867682DB +B607F1C0A9A24D5605603C238234DCE8E9460DF420BFE4F6EFC1B982F30B2BBE +ACACC718F5905E49ECB73F52486080CE0E92960347A20F79323A4B2B57AE6706 +299AAF55023204E023B81E79CD86F9FDD780FA60F156096FCAE6AF9A0187C8B4 +4C182DFE94AB6E187CDE6CF2793735F09CB3D135E5237A94CDE9F1A837409E6A +8D790E9EB0994D0118F33AC9E539FE5020361BBE79A5856FB1612A0A5FD3D3B4 +BEF2128F32EF1C3069D2F288B02A8EDF99AF1B34FAB5D0AE271001DF678722D9 +D1A7DF2D0B1BDEA0207D1C9F323059AC25B90A67E7819DEBB54146AEEAEA8D78 +C13C31CEF0422CE6552D78B54BFFE6EC1CD03AAE5C037739E141A7417488EF2D +A8788DF9FE4AC6EC70CA1CB64F4ADF195BE0ACFADDAC1BE579A0750EB17BCC19 +C17BC246CE43A554C1924A1FE6118474F5E10D1C44015586CA8BEEBDC0F200A9 +FD3E1FF666AF6A12122546D21C5C12838BBC40BBC8C445D9C0896A628736C8CE +69EB2A06F9F837E33355B4E1A6B44DAABC209AE0193F4E4637997A1A63D5AAD1 +E9BEE0260AE43ABBFCCB14AC660C0B6FDAC1580E6E0341566467C546AB8A2CE6 +5EE856F6EE9B3F2572B252E2F58D7E82C8991BD4A3B37D200137783CDEF90EFC +552C5FC51193E04DC7E5EC1CC630D7B769CC3FF4836DFCCB3E3B93719807B5A3 +B51D9EF5AC2EAE7115EFA451DD08FAE18C5B8AAC3284605688A6164FF418A02F +FCFD540938705CD0CEF5DEB30B81BDD01ABCAE96EB63E795D84FC9EBBA17674E +6A6158DA99DC7A5759F5DE319DA40429BC877C97B5E78C6A15C1E54512B77D46 +0B42E9E8129E4E97692492BF1A94BDE3A57CEB391A1CD1D8D50EF61CCD0D2834 +6C3A3198B3186005E9D5D2CA887E6126655E28088C7C05863899CFFA4D1FBB47 +2374C66106A32F5A43772B9DB91C55528A720632150EC8B58CD13DB7A9BF2FB9 +10083A86AD68B11955AD3D9291ADD506E6B21FB3228EA524BE3B4AC41C6F090A +0E463B6542FC86AAA3CEB42E4FF1412200E2E174CBE3D9D546FED9617DFE041A +34E94FDF8E3C8C32FDEDB8C7F6588C79C6B68477A595DAC95374EC8AC7FFC386 +1C04A56EE013932A8384C2E5021929EFA2AEE2AF9C62057F93AA2E3BC49F9409 +1D0ED2BF14311BF4EA815F488791752FC3DB0B4846D348EB152E93BB7E46F04A +CE5C794F8CDF58982DAEADCF94BA0240DEB78CB1745D4E4FD8FA3A6C29154F79 +F15B573606740C6266F6078D30B4F040915C802BFEF566834DBF63FE4B1B7700 +B4BEB611795FFDF7E5FEE3F70F27324755168D4543A0FD555BC591B42E157616 +FA03F0131E44FE62766C3759B7F7C48817974466EBD3299F2B88AFC890B725A6 +61519EBDD3CE31CCA4D21FB1F921D0DC6BA4175C227D6D72B876114E0788072E +F6D4094A0174B1B82934A718E8D9B37F8E442754E4A1EA80C3409A76526E0A2B +51F829D97E11B5FE6CC9CF1C0C94CA289B7C1CEAFD0979FB53843B0C9D18C7FC +832166FC861F93C6A863418BD3207182A02B902942694790D71CA71B90A1A328 +155823F2CECB7D3990443253053855FC4DCE8C61157DBFC6C78B5C42471B0D1E +DF2293B64FBB55E646293095899105100A7F7F849568B06FEBEA96BD91A7A642 +D7B1F6A019EB8C7B2E50C20B037EB4C97E39886D1227481BC1CEB3F21BCDEDAA +013921FBA7F4D80160CB66C4263B08C73E677CE284BE8BD96B7A2024601644F8 +B4FCC2C56B788D7E6C5F87AC6B2255D29E4208D87C38C651B9326512BAD326AA +FA7149F925CF2BB661418001956570F4DBBA089679749DC68943AB20BA91C4CC +D9E3738F767B250A325C0954BC076687F2A89FC36898B6BFC56C523D15206884 +8779F53399755CEA73D6B1F7CCDEAD0FFB0289839EADD20F9A8937E75169B4A8 +BE049C4483A1F60EE36F7C966A5553568B412085AAF94AA225405C504ECEF174 +D2C4315A16B23CE9FE2F9A4270E20312B1151B9BAFC3467A635838582634E238 +1294B6A5A3D2EDC0B052942FF75B83723B983B7B3CA88D17BB702CA279BB0D25 +F1A791BE09211C81E7891343B1CF5B9CB33B632E2C3F850A7663B4A2BF606621 +4028DF65A778CA59244EC5E268BCE9F584C75C5858AA0B10F60D31BBCB6E495D +2C4D4EFA7464DA34F991FE6E94ECCB3F324145B2863349C3E259A65D9D838052 +893E380BD4F7E9E6B1EE4C46A8565D920ED2EF8FFEC6C7F8ED70B167C9EBB3C1 +203D0AD10F018AC054B2313E95500964C1DD87CA82AC039F77FEA85192C6520A +89D95FB78786BAF0284277633F5916F6C574821B85A42B4A388855B47ACA6F8A +3C69E72621DB5E4F78E5A61E26F292A198CE0A765A60EDD08C4680C82E711504 +1A70280695130659E002CD94B186C589DB5CA9D03699C12DA3149F1B7E0CC1DC +2B5F405DDC446F0FC5040A9FDA697076B52110B969E4AC1502CB6164CDB3E79E +D19AD4A5EB5087FDAAD2E91399905F36CD9D2DCBE911D0FA0006A8E56295B6CF +6D71FAC5DE577AF9B15853EFC9C7E329A5FA990847FF22874B6D3F5AE1A267CB +C1DC19C8684CF5E9FFCF07C6F3C36DF955C6F90995E189FEDF311D067B660BDB +F5681312548B1A9C6708302087668335B1A9717393DBC4DAD2392B1E2D635AF2 +4063049477529F514823ADE008F70E5A1C27975DC16E4E1D776D3731F018B6B9 +36A513490D47A098FA3E48238EE966FAE16DE1141571C179FB195B588CFD9346 +8C93661136290686445972EEAB3986130293053A42460468F6A1D4A0476E373F +816848147690B16F0DDBE40A33259C4D7BE567B0A30FCDB72656EF3F2C7B0C2A +D9EC1C20313D6EF620D91401ADB127F7A4894A527004DC093DCEEC68C3ECF570 +3946BDA46E157CEAECB18DB9A3BED918A843890DEBD627743ADA0D2BBDADBCEE +CAF875257FD719D2378DA73D40DE69AFFC7DBFEAC22086060EFEBDD8DC4A195C +B61709FB30CF4C49651D4CC0F83CB17A0AA95D0F242A050D0013CC3875C64884 +0A4530E8CAAB0A201AB3972B0A45C88B5D6073D13A15A6D99FF8B74420FA05B8 +3585563E4FDA820469E7DF6968D6E09CE289DA730281797F53EB1B6C1B572D21 +5A86442D6DEDC4BEF7CEB97ACEF89645DCC7895F8F01F8AA5A0D107847158B82 +1E9AA415470666425B8E6412F60A2514E50798C031ADF765AB6A3AE48916BF9D +3749C14C389CC521FF43B4AD2920171E954BD7CC538E073EF067F5520B501EF0 +CBE092670DA7EB95D2AC2F7FD8400B23394D7ECC2B0C7E04245D0EB7BB7DC502 +7CAFE40FDD064F6B7B6CAA32626D035105D493DA5EE537DB279CF85F47A30D9B +7840A7DF5F377054E475779BEAF49D19F0841DFB7178AFD3E78572521C982CE0 +129273B6E82803E411A8EB53D03600046F64FB2D61798E41A46CFC1B7C2DF778 +E1D7630285E8312D454BF3F4A9129D95A19C0ECD7FCAE1455462F81F37FB072A +339ED9F3444DA57DA602078B1532DC4D5AA7067A4970CFDD2070E8213FE5E3D6 +67EAA315D8BE56E77BE27777888845A92C1460A4DA692CAFAC741F7C4F59B835 +F3C999660C6BDEDBBA1035BB798377B1F9AE405FB6001274A1866A0D66461526 +D49EA641CC477097608E13FC6A6F46F2519D728210ECC6C8876590B1B755EC5E +1B8A02F710CCE815099EFE37532A42DBC5C1437E312E1116479CADA52FF0B3D0 +8913EA2BB70DD578B3483E8CD2F5D289B80AEAA0354D3167134DFE93A9595496 +BAC05AD4FB6B336302BB1656B10DDD6A10D40F316D673BEB60662F3AE68851B1 +CCC18ECF887D010FBA58CF22AA18473C5B2A337AD62748428B91478B774C4779 +FA97082369335AAAF1ECD3A844807971D4E9CBB9E8398814EA819ADB3694F13C +C8DEFF8FB3E4BF646CD90E686BE6B841F1FEBA1A9F4BFA56B7DBC76A3C547896 +93C015F4C970D575F7E9C55915294905DE60614B74900B5203794349D4107329 +61B217BC412F8CEAC16E0324C9AA57AE75BEFA4AF93CE7A11C5487054C01ACF1 +897A87E6D388C5BA742C1EFF729289AC6E449DEEB8DF3CF10AE90FBE4927DDC7 +C5FE8744854E4B4D52B0022CF113AB5599770732EBB5A4E51EDB89EF0FB51C5D +102C348E6DB504D8F3E876D76E719B6F03B17F9E256FF016B18D0011AD254A9F +97A57C674CC6B0CB3C18965A9F9AB6B750C5E06E69F6DAF92C8BF3D05C47AB89 +CB70874501FA1E18181D2EC8AFC358576A042AE217FFFE8AB3F9A6DC611998A7 +D39016BD1F19199CE9FC4D564E610898699DCC1E80EFC83D7759FF763BA0185F +84B8D256055F3A7F03DC50F41C46F1217C79B3A58F765DE05A95192FC66E6590 +CCA7E9C35C9C1C064B5C88ED16DE3972A02BDE65A6A1DAA06E1ED260E836B64E +417214564FE1295617A4547151F1EA981F2C8620A50F7DFE356D4A51B0B51A70 +3984A46C75ABEF4DAE9DFCAC0B247327FF58DDC909B413FE613CB5F750879A58 +9031CA9618A49C9E173A8C2DAA71639C1B997CE35446D56D8C974ECE47A66EEB +7D495BB277B0C3082CC2999745F249100925A900C6BE8538654B48627762D9DB +B9D60CBE98DC66BD82E50812C350A1DD233B5345B23A67E7C577911EC54D0353 +8EB7237F6C071BC4BC0FBB4DFE9CFE60047809E1099E6DC69A862CDB347EFE34 +19E54A232BA6BA50D3B719A004D43AD15E0E83C032AD793CD92C6B2168BE3701 +B7CD00CF51DF513D407D8EF2D017D014F6C101ED3060184C51879222847F8559 +6069D748D3A5C4692A5636D13706ED0000D4F0C9175F3E0E628B471A6B895E1F +375034CF93CABA4A5D40F2305FEF8AA9E1F14173D5FCEE27142AFADA5ECD1687 +43ECF7A960A0DF7222C1641C2EEBE02F5E1C7FA688807C0E09E72098B39C0BC3 +819E61685F2A115CBCABBFC82C68A2D816379D463A30A0B395617B423E79DFCC +0DA89AA1CDFD8231BA44C72BA122FAA1EF41279F079D3FD842D3A51E07BEA2B8 +132D14C8B676CCC4B7EE0AAB7B47C952F5B2559C7F1D3462E8A9A108BCD76E8B +C47E564DD731F929606EAE8AED8714D38AA3D9120788E9CA4D1F6897737E013A +846AC95641D8AC8228C871E5347D1ACA6F5F324BE7757ED3D3A5C012D3E85F24 +1ABC609B03D5A6BB7D9CEE401B4F9E219622A376F931DD713DB0043BE5B3E70F +B88626D5FC25E86CD1A4400EEEE3A4683F396D181604242E9A5E28527EA2A2EB +EFB34D5AAA4BC71894F75287B4EE684E5130EE7EF20FD737571C340F7867F9B8 +E24E2C0D1BDD7925CED12DB7A8597E9F67B20A8DF00036DC4C60FFA898D6DF3D +90D75F6416492ECC4B00AA810F44FD40B8F9357B80474D0D68C8C7F2101DDA86 +6553989C836A0E3745042DCD2A47F4B74C983BFF77D70082DD899C7E0C084EC3 +EE2476F5103E4041C79C655AE1F10B6FF35C1CBEEE98080193C4ED852C1090DB +16FD990D8251780586A0DC44F0DB20315629A2A7310FA25AE8A4B9A3841FA7B4 +45D915C9BCCD18661FA3AA20E9B9F4C2CB2D06B8F85C765E1715D85F5CA8827C +BFE55D5E822354B4458886A1C778B2CC57FCF78AC8FD4CD507DB46FB96D45C18 +345B58EB67A6D5CDCE3710EA04F019190F03DF361FC73F5227F23C4D654800F8 +C9FDBAB5DDE070235FC7EA62941A9B9B9FB28266424497F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSLTT10 +%!PS-AdobeFont-1.0: CMSLTT10 003.002 +%%Title: CMSLTT10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSLTT10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup +/UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSLTT10 def +/FontBBox {-20 -233 617 696 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSLTT10.) readonly def +/FullName (CMSLTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 78 /N put +dup 86 /V put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 120 /x put +dup 121 /y put +dup 122 /z put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 +2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 +6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 +979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E +ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF +B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 +A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA +3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F +D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC +6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F +3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C +4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 +DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 +753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 +54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D +107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 +7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 +328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 +85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C +2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 +308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 +CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 +739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 +FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 +F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 +3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A +A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F +55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC +A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB +69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 +82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 +8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 +0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 +0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 +1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 +D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F +B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 +170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 +767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D +EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F +AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 +826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 +8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 +345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE +67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD +802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E +20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 +5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 +0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 +22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC +4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF +CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B +4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 +0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 +220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 +7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 +27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE +B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 +7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 +A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D +45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 +F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 +C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 +AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 +DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 +FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA +997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 +3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A +2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 +31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 +A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 +43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D +4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 +94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E +425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 +FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 +51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 +859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 +E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F +2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 +82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA +22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D +200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 +892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 +0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 +437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 +BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 +E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 +DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 +CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 +80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F +FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA +9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 +031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 +9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 +9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 +4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB +57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B +2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 +0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 +03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 +22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 +06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC +39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD +E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 +A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 +9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 +B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F +79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 +2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 +8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA +1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA +0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 +BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 +312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 +B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F +9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 +A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 +91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F +7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D +78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC +7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 +766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 +016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D +C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 +8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 +E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC +6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 +B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 +44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB +C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE +5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB +42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A +F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 +CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 +9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 +82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 +0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 +F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 +EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA +E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD +D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD +F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F +14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 +BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 +9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 +6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A +6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 +4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE +C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B +A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C +9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 +42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE +7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 +1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D +4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 +CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 +D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 +CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 +0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 +92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 +57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 +5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 +57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 +8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 +C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 +7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 +B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 +EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 +D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 +DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 +F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D +D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 +56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 +46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 +52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA +19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D +465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 +0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE +078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B +DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 +F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 +EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F +BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 +50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B +C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 +328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD +50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F3693405EF98 +F858322DCEA45E0874C545D25FE1EE28D810BD6419086FF1DC4A62013C0F6D58 +847518074F20001C39224885CC19DB05CF529A5DB077BFA6D5B68BEDC6958D09 +2B365C59D8C3A353A122AECBB827AE42E47EB04249576CE31DE9BCA35D07240A +6F69B89B9935158AEBE8781A899AB3C2BB6A4BC3597095B97C230B79CAC029E4 +78E281C1ED6B5E4225622665362B5762EB6FE519B5E5C50B9C4EF0E260822D33 +30ADFD72E06BE6594F20F246F4ED26D2719CC07E45A8B6475CF5FF3D0FB64AE2 +85C75E0F17689F40DC131C7581765227BEF4C89AB774DEC849A38750054D0B1C +60D4A8EAD48BBA905D2E3EB7B5BD9CADD45307A4A65EC799FE37B08D7C0F8753 +A083B2B87327457BF4547DD1326DFBF51F10D49118E0CF4A1A368E411E2905EC +A093EE2FE4347379DD07F3C1C1DC067D48C136EBE6B99A3805376DED05E1E605 +CC8FFA759ECE4E58E21F258709D239137FFD34EE5EF6E53DAD321EBDC06771FE +3E96FD537BF8EF63366C90BA5E77BB59F8628E300F5E549D119D2DA30879A888 +1F2953B629DD1437A60B3698E3CFDFC1F12E07082902FA3E23167CE7874AAB7F +D2DF50C21055A27666A633B41907307B13BED7C00B2F314DD3D4C33C9306796B +14965F50472541AC8004A51BE2365E6F105067802BDCCB138AA878932142BB7D +7E6E7F299B1AE97D0DBFBE7D75306F4EF9C15263D8CFB802648470153E6B6C71 +9814F6CCBF23D4B1BB058311A786495AAAC92BE050C66C4EAE5357CA21C46557 +4F6B931AA118D2F9B30CB8A8AAC0A2F4E5EDFB7E46F93420962B7532CFE01C89 +13BF1E6F66FC55D4E5E7773E7CB1CE68ED0B9225105133380423B59CA4C446F3 +3AA5CB992D8F62C9AF1FBFE707EBFAE4A2B8A3C2E6E32A03190436B8B75049A9 +6ACEA7BD977E27D1A5F994FA3FC93B647FD4E7A6BFC9C001DE061EBE5BE479CF +FB45E6E44703FC7A2A5AD3DA491F37878AC1105A4916FE24FE41394644CFF58A +E5C3772A1A5ED8A50AFB09808953728BA35BA8BA4CF2DE443BCCB5AC9677B6E9 +C9AB1FEBE847D58B9CEB6C18EC54AEF2AFBF0BE45A90B2D988BD20A5AE0772CD +114A9088BC1284F71DA07AFE82E9D115BB7CC9EE9CA46E866C04BCA817BCAE9F +8DD9956B629A0FB8C5212F0FD468AA3A8C4ADC4959FA3E94667D179EF954D5BB +C82DAADA60D5C9C58CB005FED35FDD27935452BCDCE81F4C3B98EF940BCBD291 +F7136B7389831CF2E7CE5C10B1B5D7A9B1129532B930EFCC77BA2B7334D75ED4 +F55F9E5CF7CA562902C563763D338CAA34CC704C3D371E5AD53EC3337F0477D8 +8350B7C3073DA7F3344F3217512AF40504AAB5346739E0E7F2CCB57BCCBED7E3 +6BC776D0784C9DD9647F402E9016399B8CF71A92D8AA690E4BEDE0FFF8A51EA1 +A850F461F971B568633E754562EDBB4B23707BE8C925BECD39C7961DDFF64558 +B2B2C0E71AE1135DD6F4DDDF11850711AF6E7F2660E1EDB116BF15CA28BC824D +34970D2DC9D52121AD3F31358897A39B8635331AC09EC867FBA3F9B8EA745C16 +3951A6467BB68326D29E9462B3E00EC3C437E4C2F950D9285BE860F3F063372D +71AB40E08B2A39DA0CB4010017532AB5ED5B7E5005F73CF7C089304473C7B94D +68F54D62C50869A61EA34F7C0793BCB0A047DC27F6E6A08F34CFF2C5C31C8637 +0C9C21FE3D93BDBF3C5DDA6BB33B93E01A1522121E6A9D3D5A30D8982878AD27 +22FEB267E82F38623E652700239F117D12A4F6A57387A7A6F7867FFBFD6F0745 +5D0A5B69C7047C7F08C5B83051BC46076FDA4DC828FCD01F9F76B8247B06DB92 +99DAC349332E001332596314FCCA75B8EB22EA2F24C05C2295B2707A8DFA54DC +E09AC95C953AB08B35A89A502C7523B5FC210D980672253E11A903BEA058C778 +F851F4F4EA9917CFA5736FF7991CF9BDA2E3FF6F396DB02436400D00EA29B978 +E067319E3F989D6123FC539444EA1C84B817E30E84F1338C62C45F50BF62C7F9 +ED456A638033EF81DD0BBA0C8C664C6F732F6D1E8DA9A563C95A07DE42FF40A7 +DD9D2CCEBD4490C000F0EB12F9131058F8E35ED3E75CB15305BE17BC97213A82 +552E8231E504B4C96D0B62A991526C61564BC0C951335952AF331B6B201361E1 +A99CBD65AFC99D3F8FD857D3B3A7ED9D9A61325F1ED3BA09E94C0D84DB1E1BD6 +CE76F7E290C5EFB99759F7171682E8697067991036F2CE41D44EF37A879FC326 +F8483AB36A05AB235BC73C9B562429D12DEEF0EF0F204450DF384FE6F132FECB +DEBC4056F0BDE6AF45398C196A0D1E74E0B640519DC092E0DC23347856A38998 +2AC14A6F4793C60A3DD445B0E6C539992653E6DCC949419E5A7ADAB751586033 +D0E0826ED4F0AC5C1285FF7EE091961E2F5DEBF78CCC68FAD7414BB27A01BB46 +D6F315033E9D1B5C038B17340FF0013116A0F2EE8A6589DACA9CDEF0AF6797B6 +02C6DD1D56D3FAC4532CFEAB3CD4D1877FD08A06F70E63CBAD3CD3103454916F +02386321D2756BC346AE3BF1076CB2C1161817012F0DA022523EC4066F8952B5 +503CAF9C6D4C5839A238BCEA65877256A657B4B938612FE40C053824BDBD2C7D +054969AF604A220F45C48A8E10FF6A833992DA54402D26F9996576191E4A0949 +57189E0A91838E035C1E08D2C0AA98F91E6C8F3997FED4723865942ED0FB66D0 +2DD949A5E6BE0BF2425A2EE40FE82849BA632846E486D23A45D581AE87E80705 +4A13EEB693B54413B06B6D4D70643391DEA7CB26D4A48F11C37B545CBF48A9F6 +4386055C383854C299489C5AEAF9C20BF82B43B2C1729ED1AD228EF77B74C346 +B7EC1C36555347A71D1E950E4061CF4F57B52D5AEAEE2760393D4BF3ADC65068 +D5471FD94171E091FEB2DA1294FD7D69CD5B7EAE50BC33FFABAB8184145D5730 +31E689350AA72E7A6D296C3CAA518674965C7EB6E94FC0FDDBD89251272EADA9 +4EF3C3CED3F243B42807EDAAA43111FBD48CC024E5B1B87F4739F68139416A41 +AE5C3F781749969DAF3B72CF046952B88523F298989B3346C1AE94AD4AAF4F0E +D3C4DDD52B0CA3C6DA35457F27213868C696AD6E1AFD51CDAF81FE381B38A34D +5F9D853CE3CA524D14CC686849D6C37EAD53A54EC6DA047919029D315EFE289B +BE7E7DAE27BA0BAA7D24B89697F4DC0545BD063A1C4173A05AF4F329B3BF19D5 +E1C65C375F11903D7CEC079DBE4932C2E3F4214D7F589355434A682BEA16AE5B +4DA87B50BA703761045DD143C23567E6AFD5BBBA8440044C5E32B53890ADC45D +D3989B02908948EC1A2579649FB03D22C4AB42A27F4D3332D85C33FD195FB008 +E03AD14F9B920586B451B78C1DC99CE6AEC69C0166E63672DBF451A7ECAE9856 +BC09494CD1931F0531799050646C346B6EEB42BF2FB9ECFBC57C1B44364331B2 +F09B1EFD9C47D3E0B5612AA08D2EE1EF5D0C174538069B2D200F10ACDB498B4C +39BBEDADDA5972D5599CAA3B4937CC3949D911197D416749D4BF658A16BD6650 +5BA8D329F91A54F29EB0FE77F02F9E5B29FCE6CDA23B11EA992357C27DD0F60C +D1CEDE052067427FFEB2355A428FD236184EBBD212D2E72057CFECA199B56CCF +A3D11C9BDE7206978BF8F0E010B66E9B994FB660B8626AE1D4AF0DEE348DDB39 +1C8B5874A217A15D46BA2724F2EC57391542248EC76E5CA1526BBE460A860EFF +D5A0F3AE40BA877D8204C7B71C9850E97C5AF24CAF551DACCC48CC810042441F +3DC8044D7C1B07DCA7D3C216356F9CFD5A8A35FAAE0FEBF63AE64370BF0BFFBC +55D34224C1DE007D795C197D6C8FBA6512C1FCC26376E3A382218C821E186846 +C7FE3A8A727ED707ECFCAB9AC7528E37054F74B3D128B6106CA55E4977BED82C +0BB77277190789D9E66688AF64A4FEA32E2078271F0A9529E670F857C08AC444 +A46E129DD03D6D6D393D3C2BD8569968D012D1931337359B30580F390575AB79 +34323E6A7CB4C8CFE453AB998F41B1917F0A17BDBE816201D3C21F174A613D96 +6B4A6E0A69379FB841C35BAF6344DD9B068D8509F5CE9165601A5120589A01C5 +D383A5630B2B1E1F086F7D03477EAEC46D47B8FFA41E1070870F50E28BF15780 +31DABC5A352D942C9B322A864785D2966A045612941B7E44A78EF091AAC431F4 +25BBEA6B9029E0003F36A680ECC1AAF8DB13099996238C76E78718CC7EF7E463 +C5CCBEA4D5DC20E92C85D6D9778D393D875B8842CDD13265E7A78843F80CD765 +08938812B40CC6F4AAF3534A10B59A4DF2E0948623454EDC64435BEA8BA56132 +B08848E59699FAD5D15F36192E9EEA91634252F9B59D556354919DC10F63442D +43F386EFA6DDADBA47DA742685E01FE21539EEEDF576DD2BC1FB73806A4D4D6A +A8F5A30411D17C82E6B44B3E7EE398CBBB4C0360339AE40EEA2A22AA7C602BE0 +6FA169982C8A45B9B68C25919F53ED72F09C0A2F67155F6335BCB3EC88BA8904 +4C3C8075B63E979C16BAFC6F8D7965401788AF479E8597E9752D9449B61A71E8 +A2F829656290D8043B2A18F6B94F16544A38C12A4E76AEADDA44BE6804E71CD6 +53C3E906663EA02354E6101C121F5E9A014DC5B820D50325EE5F03714DB8E3C1 +C05C2868CC10EC464F9A0F1D3BF4AA86EAB2C23E319A62EDFB1378A82F0C5EBE +B8383799FD2B99C9DE8528B9C561958C574074F3CAFAAB965694E78CF4DDBFBC +39773428B2EF2ADCB2698209D84A11582A819CACB7F31018B0584710BA6F2A0E +5D02DE49C51BEFE15E670BFFCF0F5AE31E86F2107F4F1DEE7D8F947E7C227524 +B9D626C053FA117B0F1335CF986F5C6525C1B01C1FDED43967E0676C7913EF4E +DEEA1D00618EEBB1B44CDCF95BFEB9314E613625D779BA0FE20A10340656D003 +2E9911A1A12CC2C3EAE3FE5079E59387A78900E104C109CC1E7D42891FD8840A +8904C66B30214E4EF3940E8AD961568827224BFD71E226ABFAB007257452C565 +921410EFAADB9D76DF9D7BF5ED2E4AF9D3CD5BE8C76914BE651306EB1B23EA67 +3F970DD558E29384E92AFF6484337F9389C8F45591A21F039ED138EA38B75F00 +3DB3903C3A09BF1B094F7DD3349855C36184BE2E264401C684A6665F8C59C1A2 +1C3E99CD024B926941D6460CCE5437F49200D91E3C8F57BD541488B73B5CFC2B +F6CE561CB0FAEFB48832390CE49AEA10105AA0EAF2B0081931622DE2F293A8A6 +77127F33D3D77B24CF681A41AB3AF79BE9BCFE4055C5EA87462E71D4BE383DC6 +58A13AFCCB68198EF397FA0F1A7402032ACC91B32DEA2B359E86A04922A7ED1C +393CE21CD818DC8906769289FE37D9B24EE0A930903A2D0C71B041BE16389E3E +E414C0073C39D52EFA64E4BDDB2720FABF5530AEEE989F8917035FA58C3BAF65 +0B053C5408056CF6E282EA0DD44D1E25C9B3E408EE46E615E045B0284B588F71 +264504E87622C1585BCE3B7B1F378391E9CA50FF078439902AAF9096CAC7ABDA +3726965A20A91477777B8718149505C5A0318E978E7FEFF9ECF75D623FD26285 +D3369FBC598BDFD4CB062195714BC11EB27FB0BC937BF8E102D7014B39441A15 +A600D595D21D72FEEAB71FA1DEE8D0B3F4AF0AE89246F6A2E4B56D1A8DEE1A3B +B3C0BBDB16F236FF4DA2291DBDCF610CAFBB3FE3B7988B2D82094D4A752E3CB1 +5841551FE65D4214280B62C1DAF884AE268193D4704A415719DB474685A20094 +B0A7C6537B548355CE366331E34181BC0B9A1993A9B392044D8A69191CB7EEBE +BEEDE6FF0204D02C32D46304B6748F548A21B5665E6C1EBC5132DE625B52F9E8 +5720CCDBDA7CCA8F17E35D4F3CDC7EE8B5A2A101D8F5BC8B9E76623DCFC771CD +510CFAEEB0135C4A645E9B7DF4D2A9FE4E7EE8E39643CD2E31BF0118C7FF3853 +A0FD5CB3D51B6A17DFAA2139293D55CE797AEE9B9B1201D6C076DBEBA7582281 +B7165B4121CEF151406595F7F720AAF34A09DB2A33B5819982A3DA3220BCCB1D +F115F38236365A8BC92FA7607DA6157797EB1D3F307855CC54A94C06ADCF9A4F +DB0453DE9C6AE3BDFAADC171060A99D131C3D1AC071D426878CE2F0F8A507C4F +DA901DEFF10FEAAE4242F39E6E449742CB84EC59D7E5E5E6213BFED114F49818 +8C69FFF4542ED08C7104A2D402CD6EB62A6394DA4E9DF5EEA294F36B3F790CDB +593795EFB453E5146B7E7569848311CC344484375044FC6160D54E86C0ACB8FB +DA3FB4BF1615283B495EAC9A0B5B0FB1D0BD6A2310BFC9A326EBC982FE5EED2D +06B52F1AC50AF1B166860525B639898FE0A87397291B8BB8D7AE2CE1946D21AF +537D7BD873530B8BF512003E272F671E44AE95B81BC578C2408E8614B0778C1E +80270E429954BA23FDAA02D1303049C6EF413F7EE9DAE6BF8F60827A5133E0C1 +904F3D0C0D1DB275E26A1E2282FC976508D9DDA622761BB996DBCA8346F15977 +FE454E3FE9EBD3EFC8D670D7DAB41281A8386896ABEB52C022075E7CAEDEA345 +EEAF8AAA2CBFAED8733E9D26A3DB1EA69B2548C9A0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.0: CMTT9 003.002 +%%Title: CMTT9 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT9. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup +/UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT9 def +/FontBBox {-6 -233 542 698 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT9.) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 59 /semicolon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 73 /I put +dup 76 /L put +dup 78 /N put +dup 80 /P put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 +42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 +4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 +689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 +0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA +610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 +3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 +C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 +995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE +EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 +2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 +4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC +B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 +D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE +510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 +BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF +93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC +F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 +45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 +4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 +088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 +9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A +09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 +E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C +0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A +FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C +94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 +03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF +409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 +45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 +39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 +58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 +84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A +0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F +F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD +B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD +D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B +3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B +7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D +8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 +712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E +C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 +E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA +A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC +2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 +757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C +54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 +DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 +08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD +6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 +A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 +336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D +E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB +3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A +E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 +1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 +FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 +A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 +465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 +3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 +CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF +573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA +9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D +15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D +D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 +15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 +64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 +D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C +D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 +576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 +ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 +EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC +9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 +3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A +1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD +FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 +C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA +4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 +CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 +3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D +D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 +BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 +1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D +4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 +C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D +80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C +AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 +59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 +3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 +14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 +B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 +F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 +54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 +34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 +825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 +BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 +4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F +66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E +2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF +F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A +1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 +37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 +741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 +39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC +887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 +B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD +15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 +5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 +80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 +A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 +BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 +2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B +B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 +F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B +9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 +CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 +DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 +6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B +7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 +D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B +9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 +EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 +0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 +1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 +85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 +EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F +D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 +E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 +88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 +E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 +01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 +54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A +97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 +B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 +D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 +18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE +A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 +1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 +31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 +408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF +1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E +29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 +BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B +AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 +0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D +99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE +480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC +D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 +FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB +587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 +A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C +C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C +AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D +AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 +48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 +385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 +8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 +4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C +839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C +320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 +7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E +DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D +DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F +461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A +BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 +1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A +3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 +0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 +EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA +AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 +F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 +097C4995B60BF4D8B3AFD0A002B3A6E4FA114131410D5658999B86DFDD3005F3 +AED1FA8F077AD1F27EA249221585703F20FB70E37A26C6C3F2E101693C94612B +65BF89F37AA3C10A40EE8E49915F1A1B95D2193D8003DECEF9D76FDAA33B1AA9 +CEDCB21C2A3B05747FB3ABDBD904B66EEC60CED2867442F5FE445587EB8C6D14 +87A6B1B4871A8371A7ECA6A159EAB295B167CC35ADEB8512FD0C237421773BE8 +A081FB687F9C5D676F2944DE6E6B639C37E8E49BD4A6F0903E0C31EAFC4C7ED2 +C3C67E71D8BE2B8D5784E8A6F19A9A8929DF9833440E160945274682F435DFAC +575048CC768BB8F13AA21C6B125E6073611BE138AE06D13E62E7EDE3D0239474 +E040B3E446165FFE60E20B75D2A5F9EE021B22256621C290A8F3342F0347B8EC +CFA6AD68D47C05268EE3AC8683F4840D736EAB585C6284018DC94FC103B4A882 +ADAEFB625EA966F3877B3FFEA518B809A4BD1977BF1902EB9F06FBAE30E8932A +D1761807C92594B57F86E1E36BE9027B7D1E0C22A83A2140A91406D0289D3833 +C3361F8882CF720E445B144B633F199BD875EF97202DF88AB3EBA034E510A6A2 +D2F464F6D5AEDC833F8BB9BA74A6679F71D843D6BC4D40FCC68B411224212236 +3B94C160C14C57E0BF68104DF3C99880C25245EC98AE48F71BE243D4278C2B17 +1CAFBE0C365E96559B77E607BFFC6634D03B8E25BDEF3FD2E3D8B66473C7B425 +45A646CF3B68A56D1C64C5456A61E5ACDE212CDF6DCDF6D589049EF6C91C30AA +8556424F309355355EA52E8F7342A91D122FAB2DFFDEAA78506228B49385C05B +08793E912D338712173DD0DB44C7C3281FA3D8B14CBA99A3938B147564342923 +D53A2BF18D334DE5E31659A3434EAC96A8D7B363AAEF5CA4DAE67A27890C07AC +F31A6BA7E4A3C2AF654C025F17FCEBEC864C0A9B7B68571CA56BFA4A249896FD +96BB19B8F250672878B67BA411BBAFE3CBBD940F005DBF32F1D682F487A1D1B0 +854922FF69C8D6600E67142D651192A911ABE2602E5126FFDC351E1845A22D02 +AFC17BAF941906E5F7A3C35D2DAC2A2F1C958E637A0EB5401B195FF1E1908B3C +EE13700E365119C68B8A0C3471D3E7911A6734A678F43E86FC55570385E5E107 +4CD618E7430A92C695F6ABA13A68FC71C573D62F6FEAE12D6C1EEE1F1C424C6B +CFF56BDE7FC34F88A144A62CFCE0D377F8BA416827181FBC7FF8538FA19B1ADA +1A12DAA904DE6087D90A750CF8B76F97E3AE0BE6F65145F7E99F566C8D18F817 +532DDE4EC38F5127D404053F3B6CB4694D9973209533D99DC44948178F9F976B +697A04799D7FCEFB13B347143472353503A3DAC56A753E96F46E1AA1D736D7CC +55E6E80EFF0FDBA4A7728E5B5BE6A98BDB93DF5E27253D9C646B595B0507DE97 +CEE5379120D39CA5F22E3952261C0205AFC2A7AFE07F0D8352072E6455A62FFD +3FBAFB256E0B4288E8F6B724CCB0913026D7B19435183FEB0E7FDB7DA521A9DD +EC933881FABA422199AF4F4FBE7BBF8F89F4733A31CF7814673A4BB142CBF3B1 +987E1BA9A6E3372A3ECC943A373940E4411F69F23477CDB2638C060A96023009 +555378908A27BBB6DA89D5D556A536E38DC41FC66F35EAEC9C948AFB2A826A6A +5E8DE93976448E0DA8C81AC71B78F76FB1B265E446C05DDA5E049298BFE6A4B2 +DE4053742E11EC7FAEB122D6E3E30D91F075B38C7A4D0BBA4BD4EDB637BCAF9C +D2A3E27AFD24071B4CB37722D8027E8604CB80E3EAAF45F7098F730B11016E29 +29E6E8460703BFC901B4314A825C3D1783A46F5947A46CAF30BF4A66C7EA7ACB +A63A3FD2FFD9B7DD4D72EFBD5C0314885AC7EDEC9C04244B07CAFD993B9EF84A +E12A23548EE99CF89A77C5990687BEE34FCEC3EA658448015BC90B0786E5402F +9F432FF356324779145310A982E269789AE091E430A0F4C9F3EF03B93C2220E7 +CB0627B8C4193154081CE3A57E64F659ACE95511BF4FC4D4D4D78A503B68613B +4E6DE03A7EAA69B0C6EF0C08A117D3F1416D077BE519E668A3D7826C924446CE +08FB7DAE6E73301DCEB2312BC57401DB7CB38F2ED4567735C4792DF450C91F28 +35AD53A70F762499AD712984A65BC7561CB0B0E9FFDB1F961284DDF22C42DE23 +9A734C6EF90E453F1721890BA4056EE43FEF8743407CFDC3A4BCBD0D74CFC14B +019585A4E0055F8A79C1ECA2EB40EC0639BEB7F11F82E006C772173319ED3765 +ED20E579EAFED984C0F83C694968E8BE5000C9F9BAF72F24462164578FBE03AF +8779FDB09149BBB336335C58575B0476E8D97D06CFE4F8842348AAE075872F22 +6CE687C9C127C17720B7AB19B734670E7F241D493F71F7F670E3348E205E1243 +18D645C5B19C1F5359CCD9D3E9B5167BDC1FDA655AF47B45A7D15552583AA514 +FFC9A9E84D5D3EAAD53C17F42F650BD3E160635F8A4502F31A8781A72D893AE4 +7E65B5C524F5292E2D6DEC4DEB56BF52D612335401568F3B260DD73FE1E92219 +0F3FCDC127A654E3E258DF662815A673845C91131CBFEB5750A3BA225892FAB5 +2BC7341D758CFFFDD768983EF8CA9082CE935FACA20ADE200C148E4C97A81E45 +BC7C49D180E7640AB9CDEE1D03851AAA9A5DCF5EE98BA5AE501AEB4DD6C188E7 +8917B66C41523220E0722168D50264F000046A23102A0302F68E3A17BB370456 +FECA547897AC46F4E91D7A82401AB537041F144284F8A7AF17B723669E9AC554 +9A0F0874E4C471E01F2D53930493C52FD6C61175A67A4E16EC362B6CC4B242A0 +8AA814B7ECB7FF829F121E9016CD0F9E4DF347D00AA7A30C148BBD5D857E8685 +00B284B3CA2F0DF0E7C5871A1F2107A2AD69517B3DD43591058DD5C628E27073 +BE2A18DF6E768E8E25003F6A06FC0173673209F1DB7794C144466AE8B5E1271D +37E874DCA477D70AAA8100F75425DB765BF94EA131CFE379632CFC31D907DBB7 +9F1C967FF459F490EDA15522E7C6E0399E7B76642DD67B2310987936074617F4 +4750B22CC1BD7AAB80B2C764118F317852B90580C369324CCD3AEC4B62D43004 +1B51981E02DD34A98B01A8508B189DE0C4E83813721D3B34417F63D4A25F640E +D09CAF6958C35F1E1F17F2C846A623002A91B9FC2689D944F1BC4F265F71E3DA +8CE72ADC538ED824DFE439634392FAE73FD525F563158CFC77E0E4F73C6E2297 +D9D1559BCD92805B4C92EEC03B61F313725A14BDB45D923733EE78E33EF3F43F +36DF9D01307833C59F0F385921086E0888A660BA2F78AD31252AF074602AA100 +E149F7EA08A1F6BDC3895AE0090CC1C43545DD9C639FB9B39D52F3AE78BBDFC2 +A25C3AE98BEA9DCA8A4ABE31096CE36CEBE9BE231D7567115FD2FCA246ED3916 +A041B7B38140B3A85C1AAD83A5E7D540F3F5EA71B7D5A60E6B278C981962297A +CE19E330B29652E763300876007240244775D1E3D78A3CA90A2516F68BD02677 +54899B8CDA19653E67C5B7CD73E173E4234F116E85B9FE48C50544A644523FC4 +E7472344E92271838CA7C85A11B028AE10A02771D3ABDEB514123D947859EB2C +AC95A65233B92E29C00FED999E4ABE5470C7F5661A371B7E1D65C57E7951CA42 +89B2D52283208ECB114D13C0049ED6D128750D55D3230DB53DBB5D26DB7D2A6A +1F70AF774E25ACB2037FE312A5EEDC40694A38BAAE1821CE515197F8D950857B +7AB5552C30B3114899951A421299894A07249015D943D128043D14AF40837B48 +14650157A807E412AF4E9009C281AA161FA8EDA7A1B59B6DC8C92056941127DB +8697F91BEA0847DD52FE27EF171DE0B4C6A03AD86C61C8A7D60ABF434FA8C7E1 +BFF12B8B21765D09795176CBCB70BADA370A6D5A6C55DA23C09A23663AD3D4B1 +3BC46E8DD66F74B8A9AC681A443F0341CBBB9920264EA6A1591A69882A46EE26 +0557E482A086AC5AB23B027D10E4B939A109DC2DC98B6A5F9E4CC9EC8D98FD54 +FA9540F5905F03093983FF900088332721E33B06CE903E133CB8FAE79C72284E +05005AD63DF217244278AA0CF5E02E0686857D8DE1F74EFC620F0E2A0CDCEF00 +11D89F33A7CE21672FC42089A81A427AE0806C6E5E5C954D1B5DD54E00FA4CF3 +B628A88CDEA0D61147962F5812837FFE6E7EB6043001B7DD871F4A5FE994CAB2 +3F5088B577B1A80546DCED65F01893D51D2F5BEB330E1A1F7537D07B3E1124A9 +6E8F443034498841EB49E467791ECA165990D265D6B7DCAF0518A659DF3EE073 +01EE946984292152FBF2FD33363E2EC01BD6D0C64FEDF18AF375695080B9A152 +29609B360C1E08E04D685E9FA0238FEFCB44A533B46E69F293CEDB3497A252B1 +B94952182838E0BC28D7BDD56D5285179C325E91B3483F678A6037B67229E55C +C6DB7175994B3B968FBAE1AAD369A61DB153FBD4E85F656E5BA6F47FC3EB9ABD +E877461DA4327359FAEF13F31648A9E2611BA9F8F92C046DB0C790C9BF7190C8 +6664A22A8DCADC378C434E63807051EA2CD0C8A068052DA3532B74BEB7523FCC +3E46B53C228AD100C962BC17C1A6120B22BC9BA7FABCC73C8D853CEAEE0CE4BE +61361522BFB29DAD47D8C63161DD149DB3B4A56F69CE6F06E0B8A0F5C130795C +CC75DE509A39AB65E6E948C57ECAFEFF85E48A33A344BCAC6D2B3A9E147CF412 +44B42D1E1999749013B86A54ADE9F21BB47ED0B9B0FBE6E04862CDF0A6EC36C8 +E278993B652E248FA402C96821FE3B4AA0A36E48897A176E3D7BFB8CAE2FB727 +67F1C9F310EA97B784EE5314972D59E0FB1DFCF1CD627228CBBBB78EA9295DED +3AAA3E0237DE3F86A76AD6814D05355B0296FA57F55855AB17CA33082FC055FF +FD15B98195A545958A1F7695ECE82216010A3B9B9E9F7CC95DB7649D011749B3 +6B21242D5C58C7F627DA1DE432DE5DCB6701AD43BE64ED5E129D654ABE811E2E +A8148D1C87135BCFEB584C62839A13D1C3B9E3AD1B07E8F39852E90DAF725A61 +575F6D0D884A6A362BBDA1C04CBF86CC9B38F248011F18BDF2AD86F59FB9A748 +752D1AD5D0BB7868ED11C7C5A97895502D9955AEEE1273BC97B3585BC8E0F64F +89A91959FE49CFB9E5090AAD27F3C9D9BD15E4CA2DF2F237897CA6945BCB862C +E353B8BE6F2B1D4E1BCF7226494A2F1FB86008FFC8F5F461176B53A7BA4E03C8 +4FA72ECCF1F8919AFD9A7A886AEA9005B14A928D52997A7FA77730B4D1E7D366 +50E80C99E8F04D78099D320F7CC45791FE45F069B794A37F2C4C8E24002D7487 +494C7A1122751CF6ED23C2F991B65861D809E0EBDB71E36408FE840959AEF3E3 +427B1C3FB3F213BCF32528BC101C0BAE5FD1B874189FC51B86E821426F37CD4F +98726B1553178576E8CB2CB6ED773EDD4FF7821A3AA19B5F170E7E0064E2D2ED +F6237CBE00C3B7851102D8287D23926F21977FF11935EE0C1AEACF76159FC031 +1D522D600DEAF60A76C49FAC7EA9FBB25CEAB8EC0E06B55F5502DA23DE3E429E +EE8677FAFA080E9644BF2401599E876B7D6B534A228DD92C137DDA792F24221E +C16A7C5CCD2AB7B9F01C77FC23EB879D0F6023BBF59822DB6AEFFA993CB02BD2 +52214DABC729DA7939DDB909EED4B834E328459CA45AF906012BF058AF847AE0 +18EDF77AA15D12BB3F01449C225613EB5D11D93882F7F05E627E42F2B799BE7D +9249C8F9226E929AE04ED6A51A66D789319721162E127379EE9514AB7A8308E8 +B3EEBA20F0C558EA68068BA71C9CEA158F49C295D5CCB312A6952B49F93BF4BA +0643969797744812290640085654BDAE5E5CE8A78B252ABD6E2E8ADE87DF953A +0EDF7411E58383B6A269D928DD4D3ABB621BB4FEECDD9E84B29452859B60222F +170639491FC6F77F39A256341FD992156CBC45213AEFB43316F2C3E446D7806D +6F56245B738E0F7CD2E1BDF80ACB163D425D05583AE7E7373D687F079F4A28DA +8B6EDBAF5C3C741C2BBB3D33FA4FFD71AE242E52F68B6496AFC50097EF031824 +E7E43BBB6020F93BFD437F06CECF02194A8CB87B2652E97063FECC204E4F0398 +23743A81A2EA02BD016791E99403E67EADA4ECA4490279652933F42857351217 +62118964338C51F534C68B9B9BE719C166AD3AD9ED522514A99C97E8014D5852 +380A81B5890E0A277102130BE0969E6DBC015F676BC0B3B0DE30D07901B10BF9 +45B89F18EE13A0D617FE3ECA8E6EA04652AF6CDC7F009A52B531EA70522CC31E +A0E91B6E9D60EEC4DD7F92B9083C7B019CE01AC885F6B5857AFD4123B1B87E58 +F0A889C898732E0D079184450F12BBCADBB249FB593D81738B8F69DBB5016F60 +3048F5C1D5CA2266259DD2CE37CDE4A7E1633C4D3577E390521F8A8D8BB7F6FA +6063AB1089F18C8E30F87727C4CF78D5C54B0464E17E55C4347AB0EFB810C049 +C2307E4F520110A137DEC343CABC1F642EDDDF233B96AB7F8416676BB32D2479 +65C48F746E7019C839414CEE81A03DC435F10717A85286BBCFEACF24C9A671BD +4820BCBBC896A30DA3450C4F4947CE3A07E717BC789DC4EEF25CE4AD2BEC0411 +FE152A289C1D26C9508D206386B65AA1B2AAC060163819C8496F3609E291FA71 +B29E5A529994FE4956C4EC6FA95AFFDADC2DE58ECF6C6E160D3306B8FD42E398 +4F9C0900EF120203684823BF309F03E23195F2848F51E321DFFD9BC24B6E3BB2 +474C7CA890DE8C0EFDD1085D37FC800173ECC63FAFEAD51B681F964EFDB5C0B2 +7DD7E8EF6F333497B3FEB72FE035324FBBB06E7488441083CBD10F2E6024BD4C +72A0AED77847FBBADCA8B2880D3CC8E04BD1503C70DB1D8DA1C2BE303F0C7CE1 +7673488237350657DE4B7FC9775C13B6231DB84845755755F67D4ABCE6F45658 +E17CE8FAE0CAC26733FDD493E15CF5D1AD5BEFE23D6E1EB335A3706E3A71EB22 +40BAC5D469EEAB3686691127037D50A7B2AFDB496D2B1E9FAC69DC1E83A0D833 +AB839AAEACE34AAA0F4272774E7DDDA88586A381C6133F12A41EE11FDE813E59 +B6E5C3914AFB7F786C39CFA9C5A8E73D49B3511EEE9AEBAEED94B8D559DE5CE9 +CBE6BD710215DB65F041A230740F28BDDB46A89B38AC8767F252ACD1B297EA4C +EE114AAB6EFF10D398CA1B788AE63B672C867474220F6F20FE9F0B1AC1650B2C +EBB80EB68D62024EC5C2124F3607DF8776928BC25867C4730808308FBC326156 +5A99B88CD042F581A389B459A6F8FC484EE8C17DE640C7928A78CFBB9C6104FE +004009DF77FAFE4E1C092F6E5FA048D771D7F25AAC0013D0402A1AFD1E8D0515 +BFDC767DB9BE89407322857519236AEAC3A076CEEEEE7FEECB30B6751EE09E9C +472DBDA84A3D45A6CD9B9E7A29FB31852315389E7038F57923EC9225803A6A68 +7EA2F3EF394AA6CCB8336F34F75E2B5E577A4724663A0A35338A8E95C989B9C7 +CE48B675933214EE6FA7EE94B3249ABCEB5EC75A714C30CB88E27B9752DFD3DD +0CC44FC1E3230D92274E1F35429B377DBE57867A40F37B8B88260C3A72ACDCD2 +C8AEF714124B838C638468A9405C46CB2BE67A118A117FBE0A0CAFD9A36D2882 +516B94676566B98BFA1EF6DB6D7258F9420EF010ACB3DAA97409CB272A60AE22 +0E03F9C40889C514E3A4D1BB3A10A6DCC439EBE37D8C28472060DB405F74E855 +27BAD6D66BFC8CCCA038F5BB9EE0F5F1EECB64311A731EA3A22B52AC2AA9933B +7909A46DC299C3D701527E734C339955325265C0D5A3E30B1506239F803847ED +0ED27F81C1B982FC881769BB5DB178405501DDD2507EE8B038FC9F440E849736 +2CA4A7CA8F25BC2DDB645DC96DA317DE9BA8A2207329D3A722D2D15663E47E19 +13058EAFA7BE4635666070C17BFA087FEE6244495F5E5AA6CA1FF1054215E9CF +AD6160126243C941031D3675B73AB83602B8FD765A81D49A8D7AB9A3D107BAE8 +234D9FDFD2D720C1894FE036D249B7A19165A744F8A5D1C226258F8A6ABE0B3A +65DBB2E761542D20EB327375A1B6738F0814C9273D30863144AF710492D90C61 +6861198193A64E9A6BC1093CFBA2890C4132D1B9F0D133AE52F0B8A39197534B +22BBCF08BCA93A492FA327E92008F42BAC0AD14AF049D2C23CD92D84C9749282 +FD4A491333DCFCE526AA22C2C68C1A85D18199782807725C5D1363A72CEF75BD +1ACFBF1B64590C6A24F09B6D4E0C433C49DC99ABE220361E98D25C594253DD5E +903F487B4C2553F78B70C03B8E3658405FD8427065ACE263AAE8AEF2D92ECFDE +71DF9CB7DD61A9EC5B0AAED868F91423A410527C057D8F543B93DA02F40CE88A +E4F29A755430068AC26CF97EF481B5650AEDE5E6BE6E03AAA2F1BB0D04507028 +26C0166B4F91FADD73BD4C557C2B3BB477B3A73921821A704F18103489109533 +3B7F59422F9FF147EED3FEF9BD2EC6EE9C4305593C5563CB6C400353EF3DF249 +0E9CAB7918B61706BC300A39AEB4650ECCF7A3E9342297E4E6AB177F6CB63BF2 +C33DC31FCA946D8B4D33788CB6C91AACCE90DDF5F1B92DC2E7B2D0E244F3C893 +F37B7E2FFE10EF0D1AD762243840BBC99232B1CAC7A321AF88D2BA62B55E305E +ABF6323CB529D0766E0E8F4230D9EE5BB6863B605A0DF56695C01AE054CCB502 +1905489F1A486FE00B284356D1AB83D27BEEDAAEC8DB318114590D0324755C61 +18521C015B5855F0992792E644D194BB3F52E4679659FC4B8AE383F7EF29ECB9 +6EBEA201A8875DEA6410CCBF09BF050D08182DEB13264F55E0F5FFAC218370E6 +5E9C8AF9E349856AB11D393B583F4FEED6EB4EFF9727084D69977D67EB7B61FB +A79DB726E75FD817270B6CF8C8D0A57A6F83ED03B1D3DE572324E7F4BD4D1B99 +97140FF18BF45B6198202AB9A30DEF4ED9695D5FEC15942FC363E9CDEF782F04 +486F71CE6BFA5E8D53C969065D990700E3485967EC03EFEAF0F479CFFBED405A +2D29B98307EA5D4E2CF536DA21F66A961F9A860EBA38B51EF6A106E009DCF099 +B0A2DB3D768850526B90ACE82FB6589D3459351DF1CD37F9CFA174D2F9597A50 +C1033304D971EC0C2314B2AF3E665DF1B53F751E913CB5D4808501B507059879 +769E3ADCC2D8E3875C7D6EF7E7CB48DD07E2F0B415E869D196B6D0B8B80023C5 +7501F75710AF487BD35DBC56BEA988EFB72A60D37DDB34A3E16E4C3302041FED +F67725B1E85AA62C438D812902CD301CD6B0711356956B3EE81244634ACFE99B +695465D6249EA7D73F0530B7A5C6C321E52608C33699498800E0B496288D2C91 +F85FE65F17A7127E7B24B965CA8901ACBADEEAC73A7DE07B53966F0A5D857486 +674B6BD44831C3DA3914E72DB66AC7F1F7553DD8F8125779348ACB28B313A5EC +BFD42000EC537ECF0A191364CEE8F7557697852610AF5C00EC2E23DF58BDC5B4 +D7238CF054E0019259CFF06D29A7045757429F71ED61743C71A6CD09D0CC9DA9 +289B1C880D8E07C79E66FFB61682EB3162821C9DD3161EEB998269A42D64A160 +9E07F3D060E6D9055636B786218A103F8ECEE20933D1233FBFF0ECF9F01BAF09 +560441BB6A0B6931192496CF3485BEC03F10581B3C8936A6C3BB0C3D4AF346BB +0FF8AC37DDAE5D82561F31DEA6107119F89EC25056E7FD5984EA349407EBE597 +BD71E2EE4E8034690BF158D2EECE68EA603FAD5E0258CE2084F898D7C7CE7625 +3D8990CAAAF8A87C730FCF7D9DA3E5991545CF680CE9CFF96FF99F2660E2164E +44AF04EF697F3F3FC8940BCA00A526D8AB419FF20FE6A0A007301F9AEA8324FB +5B069EDB2AAC535F5489F723BA457401417A63CC98BBC70C26FCE973F4AFF4DD +B3F3CF7AAD27AACB8C23D7E421D512A82259212FBA5D6DE572A40D04BB05D470 +EDB61AE5E4358F11D3FE840D24AC2D9CE4F91B3B9A357CBC8DFAFC8A0776DF14 +32A016B0D5F8226A7F3FE390001BC336024657D1F7151DF5098030553D71F87B +6A5C46D286D0AA3E946538ECD82EDAAF2C6B608041945232E52E27DE9928875F +D2406BA32126FCC92FCA719DCFFA13CDF0367E294AE6A4DAE01CC1D70E59AFBF +EAC961C6B3F63F3696FE3105F7980D24AD4F14BF7F35F84674AD400A94BE2A02 +9F243BE2AEDB5AA8BDC1A3FD5371E265149C110754A70412B068828C611EA981 +2907E87A12DEE88636F904F865C6CA994C0D139AAEEC147A2ED1955F527A7230 +51D5266D8C7CD0A1C1A9EA24CF1E65BCE6EBE21E04D7C94B0FF6DCE002F05BCE +1FDFF4F6BB1C72A49CE1A78A2916382D3DFD5A8A9E6D27C170D1626B702231BB +9921646CD185E87A367BDDB9DDC2F2239F3CBFAA9B73DDBFB2E5A6EBDCB0902E +CD432D6171B96245102B362BB07BC33B677CD115B309E98C35E02A515BF3B651 +99789B6B3C8E81C983D1AC9B9E53F4B3BB0AF40D3861C206272B07433C091734 +8123BF670D0BD74E04131F26C7BE882288C3700D0C3E804C23843BBB689CEE18 +40BF8DE4C4A90327099E286377892C3BF307240D0012C3BF05551B1D66F57F6E +D5409CF3C82F5AFFD40FD83C998626CBB46EB5B53317DB98C7D4C08F230DC51B +393211EB6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMB10 +%!PS-AdobeFont-1.0: CMB10 003.002 +%%Title: CMB10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMB10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMB10 known{/CMB10 findfont dup/UniqueID known{dup +/UniqueID get 5000761 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMB10 def +/FontBBox {-62 -250 1011 750 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMB10.) readonly def +/FullName (CMB10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /colon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 89 /Y put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 122 /z put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2D432E1428FB6D5BDAF +3F02C975AA4E0072BE5F8CC7D3D59BA3FD04709FC9E52189F55C7747056EDBF5 +F85CCBDB1DDE9F9163AC7158EE8DBFBE8D94A46510118ECE6A280C4872F448F2 +E6A6B36AE3224FA448DAF204D1C998D010C6BF52DDCC45831DF1EC22528B00C7 +70525CAC9F6BAD892E7D5C81295A2AEFA8A5E4B6BA2C4EF61FD3FECFA2A8551B +DC84DAC597222341E762620D3D3C1A4AFF2F6D68C4813004318FDBBDE23AE224 +617F7BC1F3846943E915624D6BBFC555E2EDD013F190492F03CB64E5F2403723 +7A2D4652BFFAD1FAA1DBA4538F2C3E608367BF95E09B853A2BBF9930D9B3BE46 +0BFBEF05DA75DF3D8E11A09D472A9E45C626428A1A599C111ADDEC7A4E70407A +014F792395A2A12303EF51698D487854EA15000AB08BCCA8B2E35A5018F5460C +9B223315D7B838BFEB224E8D1DC9A0C1077DA31F5FCE0D9D499EB0507B90E9A0 +1F92FB5FBB8D40568C1E8B8CD6E1DD27CAE6E107AEAC5696CFEB19091B40FD77 +7A4B4F0F261702BFF5E2320C62EB5C6E9DDE142E9FC7DEAB99D90297AE0F15A7 +04C0E3B39FBC85CB6B92BDA7917698230B5374D9159807ED1D07947D95802693 +A856C84812ABD3EBA336B88CC8F37288CAB59790B0882A4ED6815FF6D7A1BB35 +5C7B7437D2ED76E806813478007886ED1009A1E73CCE210FFA69A20D6E05A713 +F6EFAB133D146B0EBD547CD29FFE7870973C1E71854C1C643BADC69974BE360A +4CF84FAB098EA3DCD2DD8B2FAAD19429B0ACC7C312B03E6446F1C1D51E6AB45F +72F11FFA078DF3196EA970B24B1BE607571795A2FDC2EE7194E9422C483799EE +23E16A737951BB935EE2C2BF008B6190E0138D551E75C9E6D0EA48E64E9750C4 +BAAE32B894BE25D092CFAE894230430E43C585D0F06636C8D56BB80A4597A0AA +547FBCF12821C20F0E62369E1A9CD2343B8A8647B2FBB1F4C86CAB1F7A14669B +69DC857F9BC7538A864E523C2DF7C830315E0907CB17C8FB6E412A2A9E88317C +0026A6A402B36BDC433015AEBAD775835E5ADB4EE75FD8CA06C199E000CEDF93 +00692F29C5394DEE45DFF2D42872B1370C8D4A14E144FF36163C849F9339AB97 +EA87BD445733162A34E609BA1E92DC92F9AC892E7A0B39AB0FFE517856491695 +56155FF0C2B231EF1314CD4A146EDB1CA9AF7DD546CACDE1E6B49BF0D4ACBC09 +55C85E2D38DF84E0B779642F7E9C26CE19EDBF328104B9E803D1B03F3FC24C4C +9EF0D27C8E5AFA420A63981C000A0C1F0B3D3F853FF300EEC524C586376AF998 +DF4ED5AA16D8E298C159C2A3E33048D4EF192A11287F69B11BE24D49A033B334 +83CB8783383F92EFB9E3BE84CEF37796BA4211E534B0360970B9C57EA7CB54FB +F582789A83113ADD2415B3F84AC4ECA15DC70878A32559198DAE67B083B0EE6D +68A92511FA8FD6BA88A42769E3FBBBBDFDAD61F99A6C274B48CB044D16FD5953 +44F1503D8D1D6DBAC41C1246A71EBCEE5B1F0DCE3EE7E3A99792DD8FFBD94DD4 +3A5ED347A62D301B6739AD2BCCC7C57378C29FA5A83759E7AC6F1505DF6C0E16 +71587914F698608AD93ABEC43611DE709ABC3F1C0A1343CBED5F09DDB4FACE0A +8BBA9DE5B85FE9B4365358DFE877BBFD9AF08BC60BAD7C41433BBDBA17EA9A7B +92F76358612FE44F43A85588DAACCF7846ECF5C58B22F18120F895317609AFA1 +06E88CA1D73C4CD5098CF44093207C31F46977B6D22665AACAD5A169906640F6 +3DFFEB3937BD6CE1501C52783743F8F6110DF43ECF512D49A55379432CAB1C33 +7C38B7A38DDB91F0683A052378CBED8BDE4E6DC32FFF6D723A4D1469D32AEDA9 +FBF89B9604656DD0D44ADFAC39BA893808676E1E08444CE56F6CAFF3E93D8D41 +F164049193BA11AF94B43515BC79D6A538C00B08FB518EB67C27E73380A651DC +4B244E8A2E4ED405EA5C7EEDDB09D44C458A883C839B98D9D6A2209516E0310C +AD777536190ED06F47EB2ED61C53A2E0AD0CA4E4035324DE75F272B1CA6BC1FB +B912807B7331D932DADA30F1975A1C9A8B55604EEE8A0CB514C6CAEECAF9C46B +5D5563E8934B421EA1CCE3B96412D78DBEEABA59FC603CC6ECF65BDB5B66EAF9 +14B852CC04286EBEDD560713090BC417A10BB834944E007F45B61AD6E6150B9C +10A6FBA56C1B45EA5F9A5379B1A0788513DD4100B82BD61D89E6841A26B362B1 +D4762EAF4FF3BEABD882700BE9832115405728C5292BE942F871661EB0E6B29D +430CB271A090B6F5399184F21ED6728171B1783C982E61DB7C0BF90CBC1482CE +C6982B4F0AA39076B64CCA5A71BE73CA65F2CB60B89AFACA957EF8E6429F2182 +CA36220F80EEC5D01AD7061DF45CC5109D9F0B7E2B6DB9D6C6326A45DC6C05D1 +E81B636A82592D99C7B7ADA0E958A0D7570BFF1830017A6241AD62C53D4CB36C +583672FBA265142DCE545F4855CA3D9E528143AAC66EBC9527B76EE43B4F4E2B +B209BD265D6AEF18D168CA7BA2CEC40DF86FF352029597A5A3B2941D467DF229 +50C788D4276C5B400F360AB596E35983262A215047C9714912B2E69CABC0DBDF +BF6925E19EDF3A6638CF5794722C8B92C6DCF5853DF288B9DA52A2152F98227C +FC04D3C318E7D942E9D33582A490888F0C1CC1A8C4474091B4956222DE467632 +33CF5DB7DA165B59A648AC6945687B0ADB83EF5B286CC469B2C9E4AE92ACAE8E +86E4C62A092B8F6C05EB2ED346DAA7C573A03760ADB3CD55B6C794FF4463BAC4 +2F4A738F9C4237107C503A7EBF4F4BB4380DBB64F5F5C9B268111752FD2204CF +F25085683D071FB4149A64426859D407936A3D1E2C627652C126D8F9264E2919 +960ACB9DD61BDF973492CDB1FD20EA81E06BECF5E164A8ABAC12926DE1CBC0FC +6693737B4875F465B5623C899FE129B3A52A2BDF104F8B8429890AC870580C7D +B078A9E26C322D1A8AC1C6B2BF340813D989EE8D054882B965905D33EC3F4278 +DC41BE055E0E5F73B5A1F45E9E69718F5E155B4EA30B28BD28C52C6C322F2E84 +674CE600D699CEE1D2CFB7212BD8168B45824890273A0AAE4757D112980DF2DC +C3026300B4BBC9B081817AC7F4D48B309E66CC7455708C772A08EF6FAC829363 +E27AEBC3E7D0A91984C05935B16E102E81D6AAAC347E38EBA40125543263BCA6 +9C6F4AD6BF8C3A90279FCA4A99D9290C3B8E0DEBB4B2DF932F66FD47AAC3094B +7582FF8265CFF8BBC7F79C8C74B1FF94B26F3817A39B5FFC6BB562BF6DBF9CEC +31CC3BE4D7E431D41D55D96C4F020486F993781828E9E8850192F9F6BA350AAA +5E292210B0EFA4061EC8BD6EE15E3FAA4AB2F54110D17D29BA32C0D28559FF32 +D164DCC98EAC78822D6D6AC6F4871D47290A11C83670374F072A9DC723096C89 +EA584D43BBB13584D9B8B1820C415DA2E0DCA1B50655E81B47B9AC8343DD8FAF +95F4771ABF81361EBFA9259EE8901F31C21E95DD22FE04BDB77D23DA561FFCE5 +A7708647AAF65FBA2FD95E843D839E5734D4C08A215180C7244924E002A965D8 +AB29470A1B86065B4133A9A6EBA05EF1AC67DFB5ED8DD8C11450233D2624EFEF +3E6D3DCA7E23ADF174BC83AF25A1D7529E52D39C27DA86A2DF4BE4F8A96361CE +7025BC1954C75A765ABC95B4AFE0AF5474653E6808F85893BE6ECA1A37F8B666 +05A9E9FBAADB0DD86848D6FC48A1000FAB396F756513798E09D29ED6DBCC8466 +40181BB71C92CAAF8E240E16304DB9F4B0FB6880004A0F9AF6228E60646647D1 +669577DA709B4FDB8721B95B07B4599652A303FFCEBF858A41F08BF3B83EBD31 +74EFA947A8ABFC7467D6CC544B655A7BD4B6A4F5EA9BF11CFC9CDCE14FEEDEC5 +9116A3FEF962932F8B105BC4C51744916E8976815AC286B1E682D83091E9C533 +839223A68B9D977C41107F597E05C3D8C1C3E79542A990B0E8E22F34BBDD8E47 +B6C2CAF54B72E8F0E8A41DB343934FD2C33B6D77AF2E9061C4E76BF258CFD615 +30AEAECE9D04569D358541C346C922A01D017BCE85D4F083AA9B6939D85EEF29 +335D1BDCC9E6D5F7F58EC2BA2D8CE50CCB38AE6A2DE2F695B76831F8F591BEC4 +EC6391563D18E4169151F552B5E1601B1DDA6F93E5C8B5F4FE63F5E002AA3C15 +E0C8DE2C735EE00E9A2A01530FF37B7FEB0FB182A4E381CF1BBC80D743209814 +F99002980CEBCBE3E677005766CE1D0AF4DCC9F103499D1961771FFBF01B833F +1701EF6EB1A381A287F73E519C01084241335905661B2E8B86B398C88F39BBC5 +09FACC1344E15CC7685708BCB3F43EAD4E24A84AA0687FCE0A2178D9BA84EBB9 +68E8A727DAF9A0B28A7CA3B119798603F9BBC6728C5A6B4BFC84C95DC4F36839 +C2649E364CEA39A4EDBBA4C0E27C61648D38CA46B64E8CE797CA3464C80214EE +28A1E58B387AE0A663A39F04F57899ED62FB0E542EA108AC32490B4B2BC068F6 +2087BE9C9C3CBFDD80F2E632BC4C971A79A0A3C3A5607B997223A9F6373EE51F +C58EBEE7756A391C91758A1F6567F532A5EB762A2927F57CF9F0E845E4F66B3D +8100D1795B706FD32944CEF24A054650EC911A54A22F4F35E3034AC70F07C98B +8DD43BE9F7D68C50D6449791F5331A189706D9CD18417348B9F296D8D01368E3 +2523FCC0EF33B998FE925B4CC7BE329B32D6AF791BFFACB60E4874412C8C8676 +34914A453A592C7614AEE5001DF3E5E8D9335A155C65174B940E1AE61ACBCBD8 +A41D7E1C6FC0680E094ECF65C60CE714E6EB2A1897D8A3F39FF58D64EF7E9A41 +4CD8E55BE32CE8CA29239A9BE3FD6B1DD5CA5A035AB1FE57CAFACB8A39B6A877 +C853BE6BAAEF5714982FBFA414EC128B61326B60D83076E690FDCBE3D2AD256B +FA7A15B804402826684AAD933E94853CD0CDEA3CCA7DC833E486F431EC4764DB +F3FB244DB99FA0CA2FA14DFA75A326385B3AF92AF8E4C6D437DC3DCC07FAF25B +6C0F270333ED377B08E498BC3004C25C7A991DAC9A3E0D1FC43E2EB6996C7269 +7A864CEF35FE312DD8F87E37AC69490299CEF9B059EC7E7492D1D6E5640E0AC6 +35B97F7A629B6B7CDF3BF86D2B518EA807B03E4F79DEA59C84D98E4C94102EE3 +71A29649ED75F5ED02EFEED8064E2D54E8F9CA0C4284B987B81B7F41FD7DCAC4 +FB9C3ED70774F9FD09F3321CE1D0319C1129F5868DABBD183045984748C8A3E4 +53E085818729A1353B13C78E63E837DE483E9E2ABFDAD16534420BE4D7976D35 +F56B86EEB90F663E9778A6E0CD698E6324EC2D19901972B74EDAB8F4073E4F37 +89082F08735E8345BA167B2B76C77703C586CA5DAF41C0DD0E231184DECD8A9C +DE8FD239B6CC636507A5BE6EE5283C06A1D8D59E98A31AA76F4D358DBC641DE2 +ECE3D9F2D262FE2E878E909A950A7642A3F59995519D541B96D459F24F12682A +9AE61FC08CF436D9DF060DAAA90884A1281B370A2F824704B5347FEC65E14E7E +3D212E29723427BBB12C1CB91B28CA47D6FA8259A875EDAE4B49C33B2F73938A +784C1E7A7F21873CAD55A868A1451B070A3F259A983293289B131E07C903D7A6 +3CC66CEF8C4D2B6736282896A2683EEB944B67240CAC5FBD8A1392A875245A9E +2611B511909A041846063E465473D41958104E92519C0F86706AD640FC6CEA10 +620C9718C4589D9D562D8810CF6F461B776D5A1B040F8272D43C029C2A695D2E +86CF508C4AB11104E575E13C2EF56914E241279BE0558CD3D59D25BF13CE8212 +3D7AD1F25FA5A9155AA06306C7CD0F49E3498856318B0ADF279731E1769839EF +98657EE73CF07B0585EECB67F5FF609E0E3DA1B78F6A8FBE2F2E0C051237AB4B +1587DD72BBFD962E865EAE0CAF1A5C592F5019C7533BAF297C0F78F3287838D6 +CEBFC8B5969486A5134DA76B4961C8056E1EF1F2AD17F19D7998175D66B3149A +2CF21CCABA281EA0345EF50C1EBE7004ED495C6D03963B639A66638A43C049C6 +DCD311B5F86EBC814BE42D432EEC87B861FCBA9C8729FA5AE87E20C5B30B8E5A +BB41189A42B9853CA408BA01A559CAB722AAC3DA28E70AD79E1BBC8B6FCC937C +180B5C2E20B03D3FBAC60C83F765CDCDB3146FE5C0B02911F6E120D63EDFB0B0 +86CCF83C2AB62922450206D3701588B54A8B232126BE120432E6BB2E25C50B13 +708D742A44E20176C54FF89F4589B10D5396C94625AEA1914AC168899FE7AE9A +7D90DA67A5EF3DDA25CCBB18DBAC3AF4AB889528A381542185821B96CCFB4302 +987611DD5B5B8514FDD7F5148D1BAC9C34567F75EDAB317E0B8A7A76604A42F3 +1D46332C4791006DD1AB657308CDBBC7314592707EB163326E345C2C5EA05B33 +01FEA5B7A346E6B1B6EF58B692150C6116B149B6A26B493674337A9C1CB4F42B +A7A80AC587F9BBD7A487F407EBBF9978840A01B5E7E772DF7EF28481E7AD14F2 +424816AAA958320A0E6F318C757A474F7B05AC0F570094372CDE877B479AE3F4 +90C257A2B3F443DE43D8A58594BE8D4B5C7E5E075ACFB1AFAD4C06415266E168 +FB38C1CA256287953EDAB1D40537A3633CB52FECF3D35BEB8C2C6CBEECB54BBA +CD6E043EEF68A21D7639FAB8D1006B1119CF92350D9773502F7554B4B3036EA3 +D747596506FC674DC01ADEA9B45ADC43B9E6947235E9BA30FF462252038D91D1 +D908E9132A946FD03B86A08885AC44CEE72F0E27AA63A901F2DCCB86D87702D9 +A66F35F06D6640115B075B0260FB116E24E795E24DAE988CD48A95FFD3116E92 +63D02221D272531186E2AAB74496FB78A4064C9C9772608C49D46E40FE28088E +B5109171E7AF69599BD8BC1186C196EB11FB4132F5C9FC1395220392E17B66E2 +32215E54E9483196341D6DC691FCCEFBD00DFF4C095FA8AB36A374BD5E1F5082 +730A698AAB7B57A5399196ABCF7B7963E2970CCAC5E9A5EC552CDBE1E2EE1968 +B81CF5BDDFF9D385C9C1FFD726A0C52A4CB0C8121E77AEA16157C1EDCD1AEFF5 +5607E8F5C44072DC54332B95AF28417E2D45B4685F270821EB6C455AC147F938 +50CC9F7F2006D933D0664AADBF5D7E3E6DAD57527AB59DDD13BCA392B059FAD2 +E7833AD00F62EB89CD7BECA9DD479F7CD7C981859EF43CBB1EC1681081B58A39 +2CEC9FEC039082771E1BF48968431F72817C8156D0D6B65DD33D472BCC49496D +1F5FB1796892C6A45BCC65BECF41D8604B811824739647D87A7B28FDB3574478 +9807DA2557F411E0BA7479F31B9E3BBE6F3CAAA653883A9D2BEF2073F47F057A +CFD20BE1371F17F5B6F0A9520F2EFCC3C04A24EC272C43E1F587ACDAFEAD7076 +6139D04FD9A50F67301D7765109C76D6270D2DECC94017A877EF386AC7F625C0 +ABCA9A6D15D71AF7A5889403DDB83EDE87EF5A69EEA97995CC1601160B296750 +32AD8D65A456F5471AD4536F1AF41A4D370203F897686CAE7C89577D3A843E90 +9C08CF3E3D489625256DA5E0984BF971E0D8D251AE5B09C17883CE07750051DF +770B920AABB2E80A4944EF613891B4EC3F9E214339AEDFDD5DD15240933DC82C +D878BCB743ACBB562A41BBD86191E1129718826681FD12981D4159C7432DC3D9 +AD4C6C478EEEA0A34030BDD0B9122E8AE5F0B473AC5A48346D56C2DE42815D19 +FE378D252960D3F56654B31C58CBBBE0D634FF6EB81295809AF12222C58345C0 +4595590B2DAEF5F3CCACE8AD4CE8585DF4099665B05B32FC49160ED307573D18 +6C4D88C07CCD1BD4A0179BDDE6524D8CC9A70318578646EE6F4DE040C56C90C3 +C5C5827A77DB584E95F55F083D07AF133B31DB611D1831D93180F66A13E86AAD +573C57B42DA521764563F69E7D4E26057622C17A135716EBB2552F644065C733 +451295216950B589D09E00FE06779D50AA82A4653649B7CDCA11A1FF27AFA7FF +189A798A6DD355CE23F77BF90DD88672ED1AE3C262A2071CD9E6E8710E44EA18 +8EAF3FC2FD7A203792FD5A925E03F5FDF5FC3C0D975724B9C0EB5891CFFFAAF7 +AC4180C714BFB1BC100B055AEC13D255FDD48CDE21EFBBE6A2A5CCC75DEAEB75 +CA1B5C649CF209DAF2ED786DC4D0E02F1AEFAA8A7B2B96971E35DE1AEB60A50B +B4E5B18753CB1E6E18FD08BF00E01DB6497645F29D666701A930476B878C7843 +D729490D64FDFA946762B2F71AFD7E3CD2A7B155D6445774A471A84FD5CDEF48 +1419EBD5CA76742B84B005FD3D7F5D0A202078C60A3EB61C7968C12BA1B1CF83 +9535A9996D9C9D14CC9FDC101E93F5F396F67B8A4FE51072EE7DA28E3906583F +35CAED5618F0ABFE7D3672D76A7449C08F9792974A8C1C2622D70DE226150B34 +53837D484381789D8673CF3AFF90F47A05693636793248CA1D44B3B6A5E028BE +269547F702CA435816F1BDB39AE1149875B161BCE0DB75DE95DA1BE70A2C366E +E11B1A869ABBA393582BD97E050E901F9B23C20748D834ECB5FE32E06EDA2F60 +595AF15003353C011562E3889E1BF4E13D3DE9C58589B532070BDA0F3A7BEDD2 +12A036F88C7D30144D5D1C9A3B81501477D400D1EE712655165161D835442623 +DD542F2ABBB0A78F6AA9CCAEBFA0CD1DBE48F1F686D4261958C098758C35DA58 +0A1AAE1CED2FBEC8C44CE1F8A5F10F602867F7221C9D0A61D88CB723D24E8326 +0C03E6972FDA35AE55F39C5E29D5D494FD0D60E6C78DE97997305FFD8F4CAF0E +11D5026DC14DAED7313C563E6AEA855D814FF8FDD90AD358174D63B3648890A6 +72F197BE3646736CABE2E958E2790C4E1548D7C792B67769AA61C93101D5624F +A5C7E3D4A05EE5E4C4361956C7BFF0715DAC7D7BF7B247261B96DC90796B29B7 +8E4189CBECCD2855A3A44CDE3FB6713AEE18EC6A80C25B44EE2E27DB564382C7 +325EE9F9CCD66964426235DD8C3F9D4D942035390992F7E3D76AE26C7E49FB8C +8EAF494F0AC282E65B88F77362620F1FD5FEE696A396F09DA628F1C9AE52752D +D3635A23EFBB52741ABA793DB9C6AF8937D9C6FB65A3A74444D1DC5ED2FF9E64 +4DE563E622AAC07AE77A30FA0A7B6F584CB9FD2735D4CDCF2E233C140CD26DFD +CAF6997AF68737072213DAD93F653B34E945659A6AA5B9915B454BA332CF97F6 +E8F243D51E0E1DEC43D22CC476E46FA369989C6DA3E719D6C083B5D0000DCC98 +0989E0CC95E1C4E64095949CC3E78BC20A9EED5DA7D0B76D84512454D28FF041 +2DD70B186C108F4B0FDAFDE64467D45EDC7C86CE1DDFA7B50E7CFBB4A34CD64C +F3502DFFEA6F3CF7A4728FB4F997DEA662B7342E5B888380B311B26F6C04DA69 +210A90F17020D85AD3A3E0D9B150FA2BAEE57C8398CB09F131C3A43A2C9F712D +7BFFBCF5B04E43606F58E4ACBE46563111E03D2B5E4A640EC06FC8D881ADB29D +B3057662D5C106A0DFA73200920CA8E9E8D23007C133912C8F44941D140C5A10 +A943710AAA2236A986387D8E9668567AF0DB7D9DFB15CADFC3E50AE185AA1FE2 +5A134AAF24B12E936A5CD45A26872973A30A7250220D746AACA419A9D94A8D84 +314DF20993ED48AAA34E837178CDFDC510573E1378B3C3DA3875188993EA44A9 +93FE7D260BAEF28AAFAD27B0B19B8F00F8AB1B7AFE2DB6C252060A5244EB431B +A2F35A215C29028028A96E44E169A24314F3F37F2FF5B80F7EA3B8E73C402A13 +A2BEAEA9E949BEC40ED8BE8F03BD6D54BBE59E76C4B3DA8CD33DA98841968E4C +919565F7F2EEC4C5A8328F69FE9A26E3CB14B8D03270BB9C036C10AADD960F0E +BB23EEF3B97181AEDC88F17E0350037BCA93A39D3153F303E5D164E87CED1784 +D5B7575B08FF53F9E7AFF3E19D21B5505052CD89B18E0801916C1ECD5676FC09 +73DA419A7FDB74019C3B76690DE77B745A5D5D7C3F08572479EB17CA2207FEC8 +016D168AECE7149AAEB7F2DDADC2B37ACB9A7F01A7248C23F1882E354853EA32 +D5411221981642C703BE65ABC5610A2C19BCBD7298C9237F9E56E69F230648F1 +1B70159D591A0BF54656AB0811F1AA63169374BB2812B5E90DFCC5D6E6670233 +F9B72EADAF155F23D30430068D9348F2B5CDF6E87711697886AB2B9D32780A4D +D7EED7746C03AE642B555CFB2F939BE002E6AA1D1A352205A836F9B7BED77497 +C217284F49C014A7C14DC5F6E2549599D2F9413FEB7DBA1CD4681098626A5D86 +A42D4AC9B54C319A5DAC64994E333D39870A196F3B042770F7161365A1D5A348 +C47C538FFC4A622E23F94739294ADA17A4FCFD6B48CD7720E061905A617A8CCE +198F217116F0D832285D186B0DC0C46B2699F68E3A1D7C6B672DA603364E6D41 +851FE53F57813FC6C6AC832F67E2B5A5BAA81A0C1FFC57FEB37107CD89892F94 +32F498B3B9A2F7E886510021065F9421F785584B098F3CC567E9DA3F214F210F +E1D9906BC2BCD69B76231B487AABB3D42C98378B02E6A16324340372366A5760 +3EEBF37ED1E0FC37782911EDCFCEA08DC52E275637CE19084A9486B6986FB22C +30A491336921FDD1679C98426B577E6C81D9791D5F8AC8F5888A2E224077E795 +8095BA13DA81A2A2E80CAD4574BE8893E5E8FC0CC4A121652019FC74E73AF632 +82ED4CFC9AD9A880D14C6D900BA9DBF9694CCD0CC35FADB29EC2E09422D07D1D +5421CAFCACC1CD630F4B46CDF090B44DC73EB893B5B1AE2F16E3270C752C64B6 +23A2FE298B3564BEECC913783DA708B230D5A7CDC42074E4287DF9EABFDE6120 +738C4A4F7D09CD01E07F2DB19DB6754091A7A3AA45DAB5CDEBE3DCAD7581CBB2 +C935B1810A8EFFE7F9084913D99A467F93BF3179DB5DBF1F93A37F36DA93B956 +DB6B6E2904D7229E3164CAD351D64BA96D83F430C48653E84B79E69AE214688D +092F235B6A267511E462984C3ECA939485D87A95F68E5DE88FE0175955BE4392 +C46A2974B652AF3CDC409998114BF92E9AEBCE43C83C04BE4F6D9715EAE4064A +31DB9D81B941ACEAAD2DAC4C787F40CCF137A4B9C65AA2120749306D94D99B4D +B28A21F817D731F12740CEA06617BF9DC92315B774F06AC88759A3C40A58EB77 +5D20241D44AA4EB2DF9993E4D9050FDB4B178138D6F02D1FFEB44F351191EC67 +A7930041BD9656AFECE6163093F5AAA2D51E0CCA3A48606509A310D5536DD95B +AE761E61CB744C892D695A181851520889C43F9B7D8907276F68F1AE593666D6 +7548BB9FF533299A95C069F8C4B4A449F7A341015B34B6B20E27FFE397F8A305 +334F966AE97B43B70C08A898F40E626F45DC84EAB2EA5F9727C7A44ED82A25B6 +006A049FD3B3507410ED0EB973A4216610CA7D04E067699703217DE681CC9BA8 +C8B5E8C00BF48D54B981B8CD2B0239594137E5EFCB11E5A680D4327B8BECA9C0 +1E19ADF17A7551D1D0B80D43D34B964394E585D29CA4F2EC49A04DB0AE0FAA0D +3FBA77512511F6A23799384C345065FF178A58898004B41A14A487260EB12E5E +FF0792F7A8D3D9EDF397628A938C6D4A177BE426AFE8984CB0D8431121F13E71 +8F4CCDD18A6DB7A459D8937A3311F7257F3B5DE23F7FA84F898F8CB1B7B0581F +8D6052ED0CEEB645367D687DAF765D1C835796B6393AF161B901ADB6662B5AE2 +0B4EB20FE07E86F5605C19DC6A89DB7E840D99792E0C42CB7DD54C8D30ADC881 +72B28765BB4B3AB0DA6AC374CBE2CA337942C5CB36D584939CA95EA6858FE467 +600A8BE37EAAB8F95007C729E39E34B7B7405B97CFD84438EC2A99B29CA442E1 +21FC47447C687812F2410C4C42396212574B620B6D5062D02F0B580405B0E577 +D09184B5E84D56FE066AAB60C5346E048E167CAECB805E769D1B234C87681994 +BB2086CFD8E7EF154E37C7E394C68679B62CB825524412360521FAD65F0328FE +2DA8906AF45FBDA9E64E656769C8807276FE9D25104113D9C3F6ABD3117397FB +6E6F306C300640FEC16B96DE079C93BD55B1A1E7E810E119E40FDD0E50FE3249 +74C98C81F02AE7A0EAB03DA52809BF67AC0311A36A957FA069E8A45649C4702E +4C505AE7271E675D85122255BE1AAB1F4B49981F41C7FC1ED23CB5F793664F81 +FE1437612BB26D8F002EABB11C521256026B18E09873C575BE9CEB07B9634A3E +67B0F7619FFD482EBFEC7CDCBD2BC2EF67DE03616F7B5632DE8E30DDA2DBF44A +57A89B2CD35B8D707EFDCECC6337D79BA1CD9B5899951452513E57E920D37DF3 +EFA97648504C1CB32B3F212B75DDE4C89CB562EFAED528C2C70C292C17CD47C3 +20E5966C1C998ED56D59C697A0238182818DB5E7D3126C6CE4BBAB83FE95BBFD +061A651E5D80589B390B0FB0E5C3F46DA1175BC1B3967625E4960E5DD49EDB49 +E73D4D0D495701425A4D2A7C132477B5BF04DE04B2CCDFC6E6B39D626651F6CB +7A684EEA6AEC5FCF6935CF34A8E99A07A482F9711126814D11B9F9996967560B +764FCB1622EB86C00D8455F345D54337D9317BC2A0B7A67066B93CB411FC5D76 +48952A3F1CE2235646FAC97F6CE26D86103FC3545AB80AACB4157BB6274D6049 +3B98373F2C7F5DB95DFE924B700C24EBFAB668415B598B51E7DF1118E7A9CCDB +84C22F07FF137A2AF7148C6F1B010D63A8537BE5E0E94179CF00D56ED1B2EE4C +F591CF933B48C8B077CFE4FA042D6BC5B87B87A6E44A4F48E0461250343CA592 +B676FD7E1B21269E5B13B9A199693310934BD08993A3F2219C9CEAE599A8A579 +6265E21A3C265391BC9A286DB9D86A61BE2F4085BB6CF0CB3ADE60850A77376B +EB2B60EA26AD90185B38FA6F491093031E1DD198A45DD0E399B3BA18B423E226 +04C06AE10E48FDF523C593FA69C553C0A4EF593A95F276116FA109E792E528AF +405277E1574B06316530194167C662A146DA58AE761203B49793C2A9264B09ED +BC1C32B80766A678BDEA8DEDF2EBB73127333C65CB5899D328F8C29AF1EB1029 +112D740C53D467D0FE4656A7FF2E081824F4F3E5F63E0F09C2A81171CADFF5D2 +04DB9DDDCB4E67C53B9844B7C16A8FEB26EEF7D3D1EE014D6966688522E6D7A6 +FD0931528CE3EA05F97083D07E62C650748443EC704428C65EA0056E4E78F008 +A0202F9FA844F007CC976ACA3C43B9F5D39A2BAF1B762D0B3E30369800C2B0D4 +0B7D5CCE446084B4AF3363DF8A0E45CDE38F35028DE1A934B4145A5CF3F7C553 +C9405F7EC419F1293E86EE719C9B0C9E2BA82A47E8BE253B50465A44AF0E5076 +87B30162D28535BE14210EE3E58BB42DEFCB0298A16493095C0537B15F02AC15 +C86EF4C483A530763BBA9C900B8ADBD47064001D6F84A83847D6F8BA793240BA +E5C01102EE11BEF2BA9C02A3C8C782ACFA1603C1250C5AF1264CD6A7C4FAA9F4 +A33A34459F490A2A5893CACD560A545A7BA4701A87B7DDD56F0E988C87336ACF +2939678EF8E199684EEE271293F13E80373EBC937FDA6F869D1B97F0BA304B4B +D529D5FFD556D67ED89FC5545CECFFCA7868F38FA8253811EE27711CC7917515 +2708613F7CCFA38F02F50B614A534D8C3DD71D5494C855118E0C0DD626F7ED21 +A133B4DC8D7FCBB8A88C65BA0FA2611C6001C0DCAB8270DFD050FF8B223B1081 +1B740C8528BA5FF99B1AEA07ED7201E503E002D22378233FD7E8034C2227D825 +CBB532CE157D15BA8E800DC86536ABC67920445D035AA3B567121259384103BD +AFFA991BB45D6C0FE371C8586DB7BE2615457EFEECD5B9FF1078CE635F82A11A +214DEBF2EF2A8A9AABD955B8A18691A4C011C95EDEA1FBD7C2D90795AF52523A +8B2E7812E32544F473BC66131D88E2579BD40EC909B90848836387758169BD04 +D5B0D81BFA8D3814E9CCBF5C9B80E255A0A25F4563F46716EC2D55D3EEA9C709 +E9583BDCC0FF91CA2168DB3F39AB24529B2A8CAE8755DB986E450761BCF1EAF9 +1AEEBC92CC3BAB679ACEABEB65418B9A24C30424446A0240A79B8F43722B781E +0EC507B5897212DF9DC0669ACECF91424AE7FA8C7E316051283B21AE563776BB +BEB8F437C346F3A2EF01A89D1DBD74342F095AD3C48323D59B9B57F09A4A3219 +06F5452908C03E86F9D6251A18529F672A72D63B30540F0BB53126386AABBF64 +B214451426BA856DAEF710C921B4277911DF8C764D6BB16EC7C0912C8D977145 +5A39AFC2496AE9225FDE8C450D0D30656A59B12DF76031D8A222899B56A9A02C +C31EFF971978D9A2F178150B41E8FE3620889F86A88CEEA40396B386E1269425 +3BE3158D132E44CA57ACC84428F3C37ABE11BF3D4D4FA89615D8F0E08E910290 +961D78828D86FCD711418F42DDDC98DBBADC85EB73667B6F2988F8BC908A1828 +91FE7E9963B2C964E2FE6339C3D069010D0CD76B1423B63F789118BEE4D5A80B +B8E67D03A907A6893ACD7071E800085BB8C752714DB977E7E5DF51DE6C9BA1D5 +06FBAA820CE7050802FA035C5F190A5300C73519CE7B4E8FDD306B66B9355EF1 +04866D4C8ABA0F5CE2C0A04A860BE373AA8F9CBE667354BEC34B658BED07F524 +0C245EC8DEAE13871C5A81DC2D3E96624E4C59D512CF102A385746D4D4926AC3 +9015356C7AE571E3ECCC85CDB150EB9D680FE5E4FE2E947E787ACF108A69EB04 +40340E84FB3370392D1166D2540F7F8647B0E7371EE1F6721C3BCA61790EF5F2 +5CA19C0B5205E7D7D3DA5A29C1C5E4FDC39CFDBA0E328AFAA7D180C361F87D99 +9D0AA0A89DE7D2E20806CEDDA33190551D8C3EDD8707579C27BD0599F81EFE05 +B3692AD7793DB181BAA2AD259AD259018D6E89BA6CBCE0E8E7B0B6A3280C6A2F +576CF551573A48056D3D41C4B3A49427820941F9B57797B8DBDB0302526DEAF2 +0E5229A641C7C039E8D020584E1B1EF280EE56BCC14DFB63586884F110533302 +B4457E36BEA004FEF4515A005F8470C61F087E1EED156764605834FFFC0B7DD4 +9789591B36A11920D4EA93910DE95981AFBBFD3C6A81949A2E2016A2CDF3BAEF +7ACE82E38674DC5B8F52A06A96612337F2F1445CDB3496B611A18F39E03C6461 +FA8905865DABEF52DABDEA7F2F763B40C1F9207BF03FD382F64D0165EC3CDCF0 +BB754FDF19DB7F811E9A75DB01F9EADC98D6F10AED43FA6356881D3365EE5E68 +EEB42CA564C54DE7548F90A886E845351EC27A83CCE8B3BD32EBCAA12C5A7FE6 +9422095B9DD0A4616F98B192187E424200BCC505ADDC2DB21D6CF76FD105A9C1 +94167FF621CF4761A30D6944BE5ED318549C63489C66663709BD0EFD2CD73818 +9EF273C2FEEA55CF7363C135C2337CA841C25919058CFECED561ED166CBE8911 +270E11B03B68233394EEFAC74863F363F02EAB4A19AB4A8E6F8B8459EFC4A051 +A71790DC29E5D9A168E622465BD32E732DFA6BDFB4C177A6B2E2FE80F7FE0881 +004AFE84314885E3DFF7BFA930F77FD32CA80E186E0A1564D8A0F94B0FB487A0 +4B1A79D324EA0B4598B0005D6F09C80A9105A8FE5D9710F6F4CC5B7DBB1D04F5 +657CF089C63AE52D1368AC78240CF16F57C441EFB4A0840BF4F5CCFFAFA3E788 +1A702CC6385869068A31B500782B7F8AAD42DA876776DB7A8B14221C763E73EB +682062D9C9932DAC5A76E6CBD81026EB205BDB56775506A07D0ECBB0F2E1F7D5 +424F56C988145CA9CE53848D1456EBEB0D9B5DAB1CE8B15533BEB915C2A68EB8 +3D5F6699DE9956BEB2D9026805E574C86F00DBFEA624B8AB959D720C8C340B3A +89F71AA318B2E2ECCDB6603BAA29B568500F545DF04C6F5510F3B1C491C00E79 +863C0395201F04DA8318E84453E92133C01DB1F3A65F5B1E2CAC2E32267C0870 +DA00B4C270E0093110BED8D02435ECE0ECFE8FD47603A5599478B9D058B5F7C2 +E2EDCF2D14EB05B845F62D5910E344A334AEAEBB9BFAD50C05F646D1CF4608F9 +7C06756157F0B681BA58C962B99CE8BD998E3BF2B6BA27D1E537463E9D2209FA +8E1E69CD64DF8DD8DB0DF3D49E3E4B7C87174D3803B24E89DDD48AB253213D26 +6DC24C503C96B7136375257297FE6FB35581D48478A8D2C7BABC1BB36F0FE2D9 +48093524E0406CFD0034483A95E7871858691C2397E3A23A1746377135705C31 +A8669EE4AFF55A36A01BFCC92490D1046C772EDB9F28CE119FFA80D03307FE8C +507B32D4C08907DEF3A591A581AC8C3473E18F87D1D504E92B0DD9F1A6137B14 +31E93538C8E13B678CCEE2EB9050070908688B03C8D7CFF7206359E05F589326 +D7F2487D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSL10 +%!PS-AdobeFont-1.0: CMSL10 003.002 +%%Title: CMSL10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSL10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup +/UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSL10 def +/FontBBox {-62 -250 1123 750 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSL10.) readonly def +/FullName (CMSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 13 /fl put +dup 42 /asterisk put +dup 44 /comma put +dup 49 /one put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 73 /I put +dup 76 /L put +dup 78 /N put +dup 86 /V put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 120 /x put +dup 121 /y put +dup 122 /z put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 +5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 +8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 +EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C +02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D +46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A +4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D +DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 +7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 +C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 +25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 +7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 +299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 +80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB +5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 +8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 +5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F +F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B +966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E +A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 +9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 +A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD +94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A +DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 +E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 +5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 +8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 +155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E +4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 +44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D +8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 +04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC +A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F +F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 +111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 +8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C +567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 +C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 +C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 +51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 +66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 +9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 +2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 +4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 +5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 +0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 +233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D +BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF +62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 +B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 +DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 +C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA +CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC +38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D +FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 +303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 +8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 +8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 +C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 +9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 +4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 +03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 +93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 +91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 +FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 +06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 +95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 +9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 +7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 +6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 +5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 +3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 +CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 +797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 +DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 +CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 +8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 +04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 +78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE +730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F +021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 +CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 +90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD +97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 +F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 +4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 +40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 +3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B +362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 +DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 +7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 +04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 +DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B +C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 +B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F +9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 +3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE +D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 +B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 +74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A +44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 +A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 +3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 +BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 +01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 +6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD +DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A +CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C +683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D +87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF +550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 +2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB +17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB +3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E +F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F +B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B +1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 +61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 +124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 +ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 +0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 +D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 +F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 +BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 +75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A +8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 +B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E +7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD +F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F +F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 +322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E +523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 +6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 +66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 +B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 +5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 +093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 +B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 +6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 +EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF +A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 +8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE +144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 +7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F +172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 +254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 +5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 +011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 +B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC +0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E +3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB +E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E +993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E +0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 +18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 +ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F +CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 +1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 +A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A +6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B +BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 +DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 +1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 +93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 +E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 +4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB +F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 +4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 +361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 +95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C +AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 +50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 +88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 +AB7916D44EC2210CB941B9C9DDBA700AA803F99E12BDCE73F10F769D7C8E1AB0 +77431FDD829222D4A00DFFA8E5FC89B8DEC03AA4910C57E6A689EBC39EA345CD +785A2885C8133229160EB3DF0B348DE734E4F78CBFE9340432C21026C5832003 +E5688E20806F46ED465309FBCD5D50D1585C981C7430956CB436B883730AEDAC +1E76732CC2F9B08F3950A7B84F0CA9C5B92A11EDC335D079E6ACC69BD64BF071 +A2E22CA7B18E275EB0CF680AFAC9DDE4F9B48568A1F4CE84E9D8E13F000D152E +42DB1C1ED509438C43F0EC0000499BCF9017D11C9A36BEF738A570C32B63D0D7 +094312E00AFCA7B279DDFCA02547EEA7732A94507E88C1A87E90036DD4C97198 +A7145BF87D4B200E420BC52CF878D7ADA20C9A6F6851041AAE0E9CC14D2260A8 +01D960F30642F93C430A0ABF38071E7B0721204512584029A7E9C12314C653FD +A41C1A4711A791BC0528ECAA06AAA93D7870FF4B7A523B3FED95499A1E77612A +EB1ADA9F11E3E4D8C30D8A8C84D24C8F971CCDA2E28D3B5A9D42DD218AE82DA1 +D5E0D10B8CAD1681877AD642239C9CFEBAA787828E101EF74D259636633118CA +3D90EC062543C6ED387073AEBD2F8DDCF1BBDF739E10C7A27AEF82268278FDA4 +79553CC1A7B3653FCEE4D9C539BE35BE94B7E2EF4F7936900F6370D91EFFCDBA +8A93730C7E5C3CADF8FE3149F1E643CB0C2B1083E2AC2EE88FE9CAE1E03B7616 +6A8258CDBDB05D16371EF193E602853FE755DC07152946A9E3B4118F3381B71E +B75970EAD7515AFBFF0F1782E12AEAD5213AC3C882711A66A964C144897882FF +3778B69A447AAAAC2266822A7B9CCE94C6D75E0D4697A4BD039ACD3EB32E778D +9068DBC51C2D206874F9EF20727636CFB18EC847AA078F7A17D436BF9B8752CD +F040AA54CB999A9B43958234140B984545A2C39B12455293FBB35DE8E6831F24 +BED673E1B560E073A030BB41FE748DF4390D757E08B7031BEFD4FE872794D2C4 +1E32A70708A651F0B8FB7E733EF31A64B32E5F98761A506240517AF9DEDD662B +10816F00645F13FF275F7D4E0CC124A81194EC8BC48E078A7D4BDDF5D4B7B2DD +0A9301BEC91CB24890FB50599D6555245F1F1EAB7B3A795D999EE38EF652A608 +82D0D16B4DC55BEB358BBFAF45F4853E6C264C01D970FDC56DEDAA9E52C89DB3 +FA62A8406BD7314F0C894442FCD4897E78D6221C517F488A88DAB0F1AD70EEAD +4F6D280898C9F52D1F8379DF8D9913D8855815188ACE4CFC939ADDEF50E26340 +E25DD19BA83B83F93DD10AF8DF2D7266705FBF8542ABD4C87F9DD9EF15924196 +F07966E72B6EFB11878E68C299345D622C702DADF0285E47F09A3A3D70A07BB0 +F4DF0A8DA9D30E16E84CEFCA563244B34B511C5DB543EBB035E9D4D17BF6445C +30719B7AB9180381A07101451C4DD52A6A73B9513D95D62D79048990B4123FEA +9874B2C62B2AA34C0C89ABBC949F7D7C46447ADBA1904E041DC03372ACCD71E9 +F4FDA11A80DE03E01D3BA5E0997C2C7BA6C7E545DDE69BBA4F5407EC62E36D03 +1755649986E6611114E8B7DEF9B1C2D5E2EB35CC6061CDB91E90D9A0CEF0B90D +39E0CC5410761DF6E682605919CD47BFB3430322DD6DD633A4D130A299AE4E3A +B1A5B94D8C3F7020A41431D5D29A9142A6B1DCA95757C07FB38DE5C5CBBC0C69 +A1826D2609385577FF9AA344C52DE955553128BA5575BEF4B57A77A365FD7EB8 +6F34F8EF4E1A93F0E7D714AE73E0CC221A1EDF703F3296ED98092E442233F9CD +7AB32141DD30A42884305205FE48737741E10B3CD8B596C8954BCD0C9E859684 +C5B9E093E3DAC688EEAF117CDC0DE395824DEF1A36C29F301591E2767084A3E4 +F1A257BAED233D07C2ACCBAF068B47B056988DC206C8AF4739A2E2EF3AA1D12C +9AEB31B33AC8A1C1475CC61956BC5AB5943C3A69AE8C1D5C4F0E9DCF0CDE59C5 +D55041B4BFC408451CDBD3C0EAF632192BF198BA2112F05C0DA304D7B3F93623 +FD16C814C7EF4AD67F2958AEF6E60E19E5103440A6C14633ACD429111D29CEA4 +45E7F64B2C53B1858EA47B17938DF8C8FA558A10EB6D67128CD95A17BDAD8EF0 +951749BA711B6F3CB0F964B00A436127C9DC4AD6EF6E47018EB6718C1727571B +D032FDF5654E30B2F57EC9EAF515BF5A919AFA0CCF790D21AACE034A4DEF402F +3F7453F6E29E029D8B8B2644C1F2FC9B8377CBABD17C9F105D9205B4A0F04D68 +0DC8DB39E836A1BDC3639D48D04E93BDA4560F76E6CCF82977EF6FE274672D6D +9FED417BBDC9741F11718026FC1B77CDCF546ABE536B2D36871E7531A97C3571 +E30F3DEC5C3E295B5B8E43CDF2A4A69EA8CFAEEBA0A9B242840131E46B48E0A0 +6019A42547D8C7EBBE4E95D968D2F6D7760EBB55A01D167825AA471AEEAE5E63 +66E02A3D438D8961D12FABAA939CAC35C4AEFBCDD71A661F7200F8C06B4F7D08 +8918786B55C16255DDB34AA0AAB6631B3796165ED2CF8C5C43E94B1FB0CB8879 +0347980D841A62575F2C561527E0390210133FEC80B47C1936D5071C68073D83 +892D0B651D998B1615534138F8DD8881A5F11C305489C9569DEE6EB4A79CC85E +1AD68914303D0A99DDF17256E05283D62E9A5FAF40BC243565BAD4F7BCEFA18E +D29414E64EC89C5E2B95773F4410F6550BC41B32DC0FA9B000C54A94206D50CB +6782EC80A281F3D303A5434CE334F69985751A08E77C04C4E0CA7CDA9F82A61C +8D70D0D474D68C84AEB6F620FC74361FD4C7E68FCD866D8246C854D4E8C8AFE2 +2E8DAD5C1B04EA2A52B50FC5A0397D9757C186F5DCBF0A61D87EE9A4EEE8D2EA +C6F1072C022FB02EE93FAD70BA0F5FBC6BDC6FCC102A0D1A08118C3BE4D63923 +94540D3D522142B5EF5191D17CD53CA2A7BBDE2929A1647CCD42834F089CB0B6 +DFD1B720524879D64285C901104B2720706CCA8C260EB07FC58D48A60F07E67B +8C973B417840FFF6491C1BEE23DA8697FBEC187F0CD1A3EE3D8F841C8E0B3967 +CC093AD66C45FB2C1D5399865E310A0C3AC6A12ADF57EBEF1707138CF26834CE +F5919CD38C908C7838F4F21F43F8F454E9AABEE0BFE619483F96DD4EEA6D49B3 +29552B9E8C0733009A05890F112ABCFF48DFA2D78393A47344498A0D3C15D1ED +3E2F7AEEF4524EDB587C5EECA2D60A3A30FB45610BF72A91AB842375C220CB5E +36F8DB85AE859727FF3A91D6EFF971C1230D2A473B413879C710EC966F5E496E +231FFB5DE1FBB31538A154BEC2E3B08E84F6B28583257B89A8E90FD35334AF62 +3AEBDC978D97406CEC3D9EE1ED93B17C578ED574A30D8CBEA7439C692431D0B5 +19F21FB3493F4DCA68D0618CDB56A9EFCCC8FDEBFDBE69DC68396F73E810CE3F +B7AD97A5429747122B3E62036D01C8883ED9F75B8057F9537DB523E4B8A529A2 +17024D658D51226C0C1C9C26ABA8F40A5BF947AD2B6EA8D3FA99A01F44407862 +5AEA73879EEB1405E79B0AA0A19D69AD2609F3C7CA747742EB0554FE3EA3AE93 +E7F5177BEC64E3991ED64DE57B2B1130B37EDB3C21ABAF643C9029B25D46CB19 +E0482FEF08751EB68167AE5DB2C595E163B731C2D3AA1D1A746F3A9E8ECA4E92 +7582DA2EE3CE8D73B6203FFCDA22CE7036DC1458BA00DC2F5BC3F9B4CC570648 +0079DEA599BE9011650C2C278032673BAD62BCCB1668B2420619E92937A22515 +AE01042D93F60A662B13A5B4656855D20A69F15CBB3A7E421EB9D650C666BA96 +5C652BB442AC10ADD8574BF3B3B3E758712EF1B53E20FAE119951BA3C0B712A9 +948D6FCE5323D1C61A32930E7A95D379FDD261E7E5021AB3D226DFC1E9316A7D +4D174386511D5E95EB176E3209CB003E0C7DE3BD2F6E5EF145F2B9190BF257F4 +BA3A04F64F1EA8E8F442EDD9BA259DEA105788604530A130CA074E5BB91272AB +1FC1221B4E373E91E2B81143FBF191664B5E65371CCC56038776682EBFABC8D8 +BAB9F32CB746EFFA3F34A446C4112AFED6A663231B551A99CD8C0555B6548F81 +469917A923E975A92775E7A8E993636413E1E4FB23D80217670ADBD7BA928432 +ADF96D692A0800501403D2C9A0F380EB2BD63A31E9167C641F087E3FA0483F6C +3E2ABE7C5ADA302EF93C1FA9B7DC5B58B5FB75EECB1F091D39E7BFBBE38A4C7E +DF5E70BD5E2BF0DDDEB232CA06A551D557FC7766FA1A8DDAA28D9A905F976730 +073DBDE12F9BF76B8CE18280756B07540E63A4AE3FBED314B95C1DFC8DD0DD54 +9736CAF4E4DA6811F5A2DD6A4A1F9D9B2E7478ADEECBA39F3E923865C341223D +5619EE8F80CE3DB1420EF673B7218B462F416AFABC491958D58ED138E6367A9E +90E5ECE4666690BB65403C0D074262200D09FC3D9444820E78CB4BE195641E87 +FEAE594E1501EDACF1887F02D43D8E2B08A0478300104B8EAF06C3B2A2F8D9B5 +9E48C1FF0A4B614076C77CF53D1EED2740E1B716A030A16B2D7FC431708B25AE +2F117867E11BFFA9581967D269317CED3A9A83494B59D9C3B31FF3AA9E31ADF9 +72C1DE847E2C159B54326D08330EB4A2F9C198CF52541C8FFB3B7096638D9BFA +FBF90FAFBF091401EC2A295A355054BDC46B306EEE1D6BB57EFA3A9C82919F54 +B1D23B0AAF163ADFDE3FE845D34A5147F53F5191972E658751221672BF9F74DE +6458ABEF3A496D74936B7DF66EB6BDE8119F2402D5F086D5FC02453DE8B55B90 +5602C160A8F7BB4EBD91B4D236FB0A09600D458C05A076C5F55EA2339DCEA3A6 +C6CA0AD602654EC9DBF7447EB7C07C50D18C125A4B796CE1FCDFD65ECADE4F0E +814E4A74E8D32BBB63D144F542C623D9F0494B41F95E7557CE6BD8A6626FE1B5 +599DB2718F1F2624E8C0782B7FFE6009ED3444796B8A59007AEF885A243232D0 +61AF681426CF4292E70DCDE23A78FB4F40E91507A0E43B59C08F2B65F31E41F7 +8ECA66C120C8E13C9871DF8225FAC9A70DBE3DE0D46AB24C935774918771E870 +27BE1D66C8908E40B7F23210051A02293B65E595AC7609D232333D2DC372E48E +CA3B003793B2F38A6FD02C07230097DE2E19B713B7989B183715A35550FD4919 +A4DD41821F728DCB71EA9FB7EB58EC34092262A5B2659868936EC05485F625DD +C05F941E5F054A6BC5B936106B50910FC4DA37CF58E75F3BD4F2D8E6FDB433D1 +65B1E5E4BAC3A512DCB3F4B7341DA97086444E1C0C779D50983915139BA4E708 +EAEB93952FCACE01ACA486B9650E540D8416D0F2B3FF85BE8B03A8007192AE50 +9F82230AECD436D306D6D3E139E2E2B21C4179CE7863F51F448DDDF73E5DE588 +03396314426CEA0BD015E7986D566A92AF709CC9FD8E977E45832D68BDD0B735 +E487843379A8358B097C143077FE9C1BE13AD252AD73B91813170A1EEDE40F1B +EA816F1EC0D115A0AD46EA89139717965FE6E65D50A3D948C1C736C58BE90092 +743CB3D2C896A1A6B4451CF100E1CEEB6940AB6F90B40F9CCB1B34BF9550C981 +ADC52608D05E81B9F79EECA760BDF1154EAEA6B414FC12EF38A239FF1EDD45B1 +F2532E41F3485F8497D1611AA29903B29B818A3BDB1A9ABA30A8816F01392539 +5DCABE87B5D53375352D28668BF09D315C7A81E09CE49AF6419986B2111489A9 +0746077BD99A6E3BD318AC80B4DBD3D9C0ED1F5DCD419846F9BF06434711B74C +EA90E2EF3377298C39DCEE6A2125E66771D432FF3A2391F51CE44C71EE59C1DB +3875F050069A600D1842354D3D46D036938A00BFFAE3E467BEA91B58941BF007 +DDF72129F593B94F0E3F194266F25269F78657E6459DBDD5F098673FCBE1058F +E764AA3A7BE37893EB8AFF107A7CF315390320D6A082B11DE3FA3D54B2630E89 +43AF6611E29AF2465506778A6050BD24235E6BC078BF26064D23A3E9DC453949 +E2962100A3054C2B4B79183D2FFCA25FEF1D2EB506D65B3971FA512B174E9404 +E17D7F615B6D10D16F0B0642DF109B28D7C8ADBD38701B7C1A2EE9F66D64492C +36BB3E4534131C4977E20EB13B8E082AE3E537CD19BEA18712AC2B015A0D9FB5 +6105C2D29DFB8EA608D14876C2B70D940C564826264511CC9A2F6C2DB7F359E5 +18C52544682534F66B57E456161ED9F805DE6EB707C3057203AC21430630D182 +D8A6510865216E407C842107F7991165DCCAB03DFDC3A1D10F4C16E31445BA5C +A222191EA6D1DB9FEDF54FC6015381C9BD36F2DD7D40F0F52AC0AE817CF84322 +AA6671116326BDF83A2D4AFB77C72ECB5D8262220CAB18C0FDA2C068A2B0A959 +357F0DCA26E529AA1E265E7D2D2408037A08AE3C12032DDA78499EB3F401CC61 +185F333B7FA54A4C233CF9D0AAEF0EA7D714D829000D99C6D67916CBC13F77B3 +47362B661C731F1FE2E8CB40285818C2A2349CA2D1CE8C5A8A23FCC839F4D487 +36977F1D56EF68CB2EAC4BE045B45A355BD780204FC029767C089A0D2EC210EC +68D8D916ABEBAADB6C34C8CBCF567306BED2F0BF185B1CA87A97273009F7CC43 +DB515293F1D96F0BFB3E565CB609EC2FB0CA30684A1015BDBD6DA5BEB74C4A1E +198E27E7ACAB2357CE190E9ECB3FA0E6482FACBAE6F7ED55CEC3893F8B872636 +DE8DEAB7A282B5151F6E60AFD2CC0B9AEB020CAB8A06F6E369D375BF18AE2437 +4B6BCD547315A79F9D06C6C19FB289183112FD43F864F74C58771C7DA86F10F3 +4A8419956F73A0650B1D42F9DB17719A0DD122C1CCAAD2DB719A352FEE48B092 +C88821FD5A80A21D9CD52A19B53A5CEC0BA4E12CA3862DBB06333E7967CDF346 +0420809AAD013040D0CAC775C5BA94766AD642EAED1984286122DE12FB4EC052 +B690638F7E4B1D4098F76A0CC8041612EDF98187F404BBDC21E1454C50A30DA9 +A5CCED2C3F8A5302A04203EC98D7F0CED5096885C7E2ABB685D4136469750EAF +B7171467945BE6957DFAB66718D485CB0CACB7A4AA2FD573BE04446D3641B445 +F206D7ED7DDA77856DFBAE2E2BCAE0544BB391960392A7E7078B30E6374CDDC3 +D84145FA5E1CFB3FC678CC801FBF9CB087211036EC3163B213A3C943BFCDA7B1 +33D8444C35CBBD735DB0554CE1A0AAC1C960F9733CF21821B3F9EBA98629A0AE +9F78B901D566BA36909DFE43F767EB69822B691E4ADEB5D9912DF00B83875DD1 +BA339909AB5B0CBD7059328B057C2479DEA0F7D30969B3798D9791FBE8A5C300 +1084B4A37FB1C8E092A1F1500F490B6889333B3D0933CBBADA164B66CCDDD058 +1974EAD60EF7A5E1D12AD801D177E8DF6C45662C1421B73493E2B5FCE4FF6EE0 +572F856735957317CE2E46FC3852F947B38730BD3C79F2B91B855C8A05EA6217 +F350F8EFCA470EAD29CA75A0659D56C99EEEF35586AD14DCDD4DE6564F826FF5 +9B104518DA0D9451D0076DC69BEC4C5717BE5D5ADDF0821009F56846AB0EA42A +70B9E592FB09C8B3B4F562A421DF521FC1D4643BCA7DBA767D49C16D08EA703F +56431948182CE03FC006609329C5EFC0DA0AB00747EC83B558E5617C5E57EA79 +E62B80BB798F870CB0E5F4372FB16101A9961866B4FC4F67FE297408E5BBA6B3 +7973893F42BC5DBF09544A4E2E9E79FA0B18F429C480F52833E3AC0E350D0CF1 +858D0BBD416DCBA87811F666928D81C26B9C22ACF3B55A7B62296CE3A6C7AD0A +4CF089E94B62872C46F45C368B6CA8D493D5DB2C1DF40009E67BFAB564E4151B +C62F4F36BA1D10429DADB302A23941E87F5E6B29588E9139B6053356C92B0FCC +B4FB39B7CB1624F20392D20A4743C02BD1F09C5600E6C90151C0E5E1E971F163 +89EABCD20AF83D5FFC6022B0F536FDD16DA3FA77CCE24C5FF4200512E585E90A +748F22ECE06F9BDEAEA923494AFB0E11C649C9AE42F7A2AF0DDE89781E187022 +73E0AD18D8297C5B310BA89A29814699A9A6F75F2D764441A1B66FA01D169C58 +8384FA3E89CF6105E8FF5AB09D29881057C0C61A359564B05ACB8BF11769DABF +A628B03E53F385BB3F99DA04A756D2B89145FB5143736DD76E09C2572A46C3B5 +30C81C32F810BC8135CB2F86D7E186573485340A6656CDC1ED3BC6BB5FD7F0E3 +6F66A83969D596B7087D1EC5D9E971DD09DD8C6ED6BA35AA68B903DA3F685807 +3C68601ED9D2E26A199192BEEDAB5E7CC3BCEA0B4C5CCC17DEE0F39473E9E94C +D75563B966F856C70AAF46A02A975BAC28A85C154CCA163D467966EB61927B69 +83DA57F613B5972993177ECEAC7A0771DA42206559898C434F266D70F8B9796A +F520E8EFBAE685DDDF22C8B4B268E3ACF32D93E8BF96692F3959F319BF397E13 +CE13D16552CD85685F31BE90073448BF68A8FF08F35670C6D5E3DC9977F4EC50 +5D06AD240063E3FD5F6E11A17BBC9CE908374944068E75D48CC7667412D61341 +6642EA0B191F1209C452E35FF50A176273D04F12A6E524D4338140A77BB395CD +956918A470D264A36E813E30F5740DAF3AD14E6A55C8FD419997A15831878731 +ACC10B2F552C99582CBDF3BCBA8AF730E27690DB2EA83E7B6F7ACCFE8603C3FE +4818314EEE5595247D6B2B433DB4FA02EC8E73A1B630138C9B03ED2FE9214335 +2810180AB7E89CDC1627B787F0E682F7B85F89E22BE09EF3A14072BA7336E83C +C429C0B183188323FEADD719AE6CBC769B0283062F85FF8310E6B8C2161D4091 +7DCE2E98018383E808A35A5B9F38893DAF081EC1198EEEE19B63391F8E075F02 +2ED0A405A71BCB5932730CBAA5761DFF46F7FDA5ED956089738F42F7206926A2 +0BB0C41B4F0E0F32DBF5306FE89B3C47E6F4E7D7AD9D8EE773CD1C831A98EB94 +52D2D591403813B8C11D892C58FDC81D3E890C277641FBC7A2BDD00668C2C1FB +27EF428F7FD67FAECAAFA06A3EC09A638367FFD13F7E83AAB1FCCEF0CD0E8D9A +3480E7176BC82728D51F48AF03CF625894620F204DB44A0CAE566B6449C9BD86 +94D59B9F79D763EB7C119F4507365976289CE5C8C785642F80FB2DF5E5166AC8 +D7466B098B8648502573008812ABD6A3A85BA9CE967CEE0E26A20CDFF06FF3DD +97629CDB45C468AB870D58C6FC2B4658A0CDEBA62B7968369E96737FFCC39DC0 +599EEB31B801294E9D36B9A54A97DDD90DA57DD726E90EF841DEEF0966083E13 +CDF97C81FFD9C9FDB17E96C32D0B8B3D9874B361E6F4E753A713F08859A2BE3D +9497DC6ADD7E9A285DB4F518B255E0752E56FA3536598D859091A9A2A8BB81EE +FCAD0095F567D6A57CC7737D073FCA5E551D9BFCA9C981261F19F87626DE7CC8 +6304AC68E704A6083297D3A5DE79079C138D18F5B3BEE39E8FAD8783F8BF8CB3 +5D4737CA9674A94C165ECF3922F1F421F59B7CDA3E725F6E67191E780063ED30 +CC01F952314FBE98A7A7237D25B69B96176E196B5747279BD5A6324749954D2B +DC0FA6684F3BC6B88541091F06C9354655480A0AD8F9279FD072380C57346D09 +BC443C6B6B6E34FCCB472CF8C633C54A281EC850CBD63D11C10C9DC322B6D27D +B9EF881F6DB191B1B732584FA01200F29BF185536965A8561949BAC59A50E903 +04D33F1ADAF2DAE3AB61811E63931B6DE791A0E87C633728A812CB9F88AD4224 +0903FC9E756A2869F6F0048230387526DE9C1DDB1B6CCBDC51BE12825522E7CF +7521D9A7B499A8CC14B4AB2648A40D5C8D8ACA2A9EC3D0F3619FFB3C1CBA6737 +B67B2784C4329D1DB704A0A083A87BB09BB081707EA8B75F15D53B8B488AD985 +6DEB5049632526A4E8158EF44CEE56A8CA55072864B07F4E2078E4F7BAEFAFAF +E9E0BC1DD5B734F23E57E3B77FDD2B93BB410BAFD9257542CDD4B5804695E6D8 +D2C65AE4F024037BB099E9FD16077AF3036B97F6353941F01A27265EB63912DE +DEDF5EAABA24F177326D9CCFBA2C360C14470C0458008BB42091344E6CC9E057 +9BD8370E04F7783B66C370B6EF23932DF99A1C1C840AF6CFE7C874F198E6BBBB +ED973F802FDCFA4FD2179F242ABE5FF2FDD171D7A5C48AA5E39F30AA62910B13 +991DCDCA0632AFB4A7B8D2DEB698FA9BEE262D3E796A08C11F4B5DBAB8091840 +28D061F8A6CF293D7BEDFF4F26B1305BD24A378764F6015B7D7FD40B038E351D +7929140482B996200D7D6AAE9B7431E85DA600716230A7C48E8E76FEF8127D76 +095410A7ADDEFDB9D04A019ADDDD68C4C7A97164B4218C721E6069BA189F912E +D0D98577C5110BB3A3ADCAF46F095AFEE3B7119508649A0A5CD950B6AA7FAB2D +9EBFDEB9AB222E4033F0433698B9D3972965E4A6FC4F4F8CC12AF2CA74FD9884 +8D3725FA14CD504CF1E6A439CDB22CBA88558E97B5C6E9FD2DF50DF08E4EDD4B +6F6FD5FCAF83D2BCAD758CA480845E0412B0D013C0566071917938BE6D8BC745 +48B22D1F8305D88C5FAC4D21E3E2041E46DB9E701DF2775B3581928CF79FA717 +CD5D7E0914DAA0CEDC5C50909BD8D9F262C80C17A4AD97CBF20B0CDAFD59EBCD +8504F57C36885BD13952993D64D451B1C3DC070C7585F85058251AF2C1E336B7 +1551511DC102295A5B66E16E1FB81ADB280CD0362947097F92F93D1C0AB5F8DD +210682BE092201FC8A908CF2B4AB5CDFBC419899082104891D955F72D2899090 +8DA7CD5A0A6BE0818AEA58126CE5F482EFC7033877DC2D029BBFAEC1CA3C40AC +979E4B6694CE5EBA17F829463AA7E6489027425E61B327601FCB7DECF112C4BE +1904479AC72496E7B03D51F3A50EF1DC56259F85E7033648CB02C5A1A21C739F +2423295BE548B2D00EA678F6E20DABC7D3B38989850A26C23E2B995EE20521A8 +B6A0C19F16113478495F8092CDB092D9B6A4DC9113E82C6DF873174345CA39F8 +7D7C6006DE44473EABFF83064E83FD1B6D1A5FEDE316C6B69D6A6A001B744CD7 +D5D953488BD09C9F630D1532253DC33A8F925F5770DCB8534422FA8C58B6E143 +42178F9122798908A8B6E1D04F21E668438B211F5EB99901ACCEDE25DDFDE032 +4B7FD2FBD842EA15D10E97EF9E6A206B5A7FAD8247498A34E260BB0F0D69032C +07D7E477340DBBE32B5DF907EAECB9C91EDCBAAED33E1732268623EC0D9FC04B +47542516AD530E95720F743E2F6BF708E75F10C987B153 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSS10 +%!PS-AdobeFont-1.0: CMSS10 003.002 +%%Title: CMSS10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSS10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup +/UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSS10 def +/FontBBox {-61 -250 999 759 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSS10.) readonly def +/FullName (CMSS10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 +7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 +DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 +511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 +1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD +028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 +1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 +63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 +274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F +388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B +E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D +AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 +154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B +4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 +29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 +CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 +C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 +131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 +302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 +F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 +AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 +28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 +121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A +A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D +8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 +69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 +BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 +C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 +B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 +8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 +161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 +F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E +A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 +0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 +D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 +B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 +DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 +261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA +B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 +64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 +F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 +AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 +CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF +5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 +73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 +A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D +EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F +1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 +D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C +13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 +C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 +08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 +B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 +23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA +56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 +2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB +DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE +3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D +5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D +9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 +2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 +F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB +73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 +B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 +11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 +03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE +F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 +5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 +60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 +622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F +BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 +C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 +8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 +1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 +F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F +D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE +257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA +7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 +611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 +246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 +E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 +AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 +EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 +0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A +94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 +73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 +AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 +8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 +5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE +6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 +B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 +129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B +AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB +8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C +B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 +753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD +A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 +93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE +207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 +3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 +7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 +D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 +09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C +5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 +B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 +E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 +C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 +F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 +7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 +99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A +96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 +1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B +48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F +4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A +45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 +D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 +838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 +5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA +ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 +DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF +E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 +5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 +46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D +491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A +DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 +F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B +0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 +EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 +E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 +0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD +ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D +8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C +8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 +A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 +4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 +AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C +2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 +14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A +647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E +6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 +4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 +D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD +60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 +4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 +BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 +1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 +6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE +65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF +D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 +6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 +85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC +7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 +BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 +9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 +6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 +2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A +374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 +39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 +AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F +1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 +E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 +AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD +B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 +CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF +9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 +DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 +670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD +99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B +8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 +E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A +F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 +DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 +99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E +DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF +51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A +40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 +AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 +DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 +8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 +BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 +BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A +0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 +4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A +8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E +5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C +7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E +4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC +717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 +FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 +25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 + +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.0: CMTT10 003.002 +%%Title: CMTT10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup +/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT10 def +/FontBBox {-4 -233 537 696 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT10.) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 34 /quotedbl put +dup 36 /dollar put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 125 /braceright put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 +7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 +6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 +14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 +0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 +3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 +BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F +D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 +FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB +556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F +8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E +F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB +B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 +125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 +A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 +4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC +56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 +E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F +15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 +2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 +05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 +6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD +04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 +C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 +70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA +4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A +A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 +62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 +240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D +69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 +ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 +121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 +0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB +D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A +0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 +D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C +550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 +CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A +9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 +FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F +7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 +E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 +50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A +2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 +9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 +44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE +49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 +385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 +8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 +6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C +EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 +E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB +C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE +484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 +4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 +0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C +6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F +5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C +1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 +909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 +BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 +CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 +2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 +CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 +EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 +0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 +9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A +D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 +21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 +7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F +52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A +FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD +AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 +F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 +067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E +E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 +C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 +5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B +0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD +CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC +2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD +E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 +56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 +F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F +E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F +0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D +67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 +EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 +CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 +9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 +9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 +C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 +327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 +F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC +60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD +A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 +B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 +0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F +1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 +DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D +55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C +7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E +75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 +E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 +8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E +F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB +8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F +D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 +54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 +49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 +CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 +34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 +1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA +6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A +DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 +E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD +4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD +2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC +ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 +3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE +97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C +FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 +A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF +639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 +D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 +E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 +1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E +A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 +F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 +5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 +4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 +664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 +4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 +35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 +1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 +01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A +5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 +2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 +DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C +BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 +39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 +C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 +99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 +7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE +D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 +6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 +5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 +6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B +F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 +E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 +39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 +7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 +ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 +6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 +2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 +1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 +06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE +5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A +288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E +7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F +759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF +E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E +03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A +6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 +314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 +74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D +906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 +673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E +A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 +931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B +CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 +E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 +4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 +2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE +F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B +E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE +E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE +251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 +7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 +46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C +E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 +DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 +F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 +507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 +46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 +2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C +C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 +CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 +57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 +788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B +A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C +C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505 +27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA +1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7 +4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46 +F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F +2FD466826D4E6175E9B3AF676603DD8C5F5B037022B38CB7DEA203B11D993027 +884012CDC35C4B36242F8D77D188AFE30F09D5D4B9E13A466FB208B9C3B3D269 +A12EBE66EF7F6ABFBFC024B72BC06828FA7AEF04633B1A7C93B778D17B0AA1C6 +721295869CDDB94DE898C26F40B1E3E93B68B06A63719C44432BDB45C3FDE04E +7EE718BABB4A57C7709D3C41E6A3C997C0E7BFD60854EB52A73DAD8E02F6E43C +4EC19A0D6311293BB240782BA1DBDDC0F65287E6061FD3333718D7CFCDAC4715 +589A5ECAD2762C643C0A7B2750C7038F6B8F275D9423DBE3F3A442F625747D58 +A26B03775F1EDB35BFAD9ED9C2C341F89804D41A9445EB2BDAFB2043F674EA73 +4962020D8641448B253F4C108BB1244279064765CA38869A7EB73377A168E596 +1B1E7F573D8C09649963F67CB13DA10D55938E6321008B54FAEEE7AF48EF153B +520A8E750230D50631819EEECB35B69369C888AAB9103BF3A60A7CF6F357E20D +EED0F3DD636D920AB08797A37577156E3C56B37604C8DB2744DBE77CCFFF9E9C +150CB37173CC122C366366EDB5847053A74ACDE3AC86A253EF7BF3B90C59647C +A265D5F3F9D60352A41DBE682C3091F64C3298369C71197245000C81B17A69BE +E8F7AF9BEE7AD5DD407E9C262D52603B16C5B0A87BC7ED85E10FA988DB688A92 +470100856BE028C6A8ED4630A58A2C716E79E4AA1C59E99D1B38E65AA30B7BC3 +B4FC020B003DBCF97082521BCDDC572969864809C35F0BC5C7A59B86DDE788CF +4544D70446CFD36D388A7BFC0674CEF8E44EA7FC0DA8EEB5B4A8A4D61FB4D8A7 +964BD32CF308E0F0A7CAD61670A6E0C0B0377951B7ED60BBA08F874D9E95CDDB +D3FED52C51D26800DAB50AA62361C0D1A1757831BB68863A34DCC811ABD1BDED +4F258F2DAC1FAF16061EC47F5F742E507C3A3B72190E56E9B5E403A0771421FB +BA346C531A4E12532D0986434EF9655C3E1D9966AC9F9F2DF8B5381E8C764746 +D14BB1ED9A0BAF084C74913B3C9D7F90080AB112BBA10812A077E0D090BAA92A +2E88142580FBCA6E5AC62145C7A4FE583A6A1F7212624FAA4BF2B5FCA3CAE188 +2F21BF5FDF3BDFE3F72744C3D842117D4ECBB70A98762196BE6D9B2127C5B629 +94AF67FFB984878F2DB8F3819AE130F9785522624503B9CBF36A2678B3C9E3D2 +79826C464A9D9065659902F630A527EE40BE9CDE25106188E837BCE71D465576 +0275556A73BC10E2496B580DA205C1E334B77577A4F2CA9A204C9811B60D89A9 +C4746392E83EA6BF260F17003E3D5CEF2BDBE28FD4ACCE6AF7CC9768F726431F +C42B143A26C67464E6D24E11AD4ABAF999FD03F2B9D816D51DDD3E3A8E4FF196 +4DD14E67A8E9FD2D028D1969F2D9366C404A0C19D6800DCF6A1A1079B45E7E63 +3CCD3F2DED5AF585C938A805AF9CA4A3FD6219FC44CD0E303FFA652726DC0145 +EC6F96F1B0497C84A6623D32353CD7684A1F4437B892CADF70334FF6D7B4C6F4 +97331632FF1FB14388EDF4BD996C2E1563BDA1F17916F2594A12C4176BEEBE9F +1EBA0D351978D9114E360E1E97265EF76FA4123E6ABB60D4EB1C67E7E16CEA41 +8ADB60B13F58C8E45D64FF0A49EC86948AFC2A6C2C778D5F3FFC73250A597961 +B66368352FB83F2948AA66104BF95D062AF7FA1C5E841724B47DFFC6DE5B4667 +59C193D44CE020779A0B6E2E7AD45948B2225F017324471F2E9474AE0185C815 +632552ECB91EBF0ED1FA7A4A3BAB2D9C409673850C4C8235DA5F8C164F24B4A8 +1242B86EA0D8819E4A6691BA3B2E079D47374D02DEC8C94DBA8B02D496EEFFF2 +D9E6B8CE0C5A08EB556702A7948BFEAC76ECEE848BE845F00CF9C96E49C1C8FD +E45265271E6E9F502C8BA397253013F7B36669E5A15D4135E96C39075D9EC1A9 +87BD4483518FD415861028AADD85995F8CCD4CFD94C7D63FD35E370A8E2A8FE6 +8032B72C34E9E46C35733E6174779CDF1D7F5C2021806525D7ECB9CEB57ADB54 +B836AC834D57F69EAF2E79C875A1B630138C9B03ED2FC51197FE003A1868F38E +5ED37A4059F02FFB141C9777BADC54034911C9AB27A302E7159AC789FC5E5CE9 +EF2FFB5759B3C76AF9E24214CDEBB2918B910C105609EA380514F643E9AB0D57 +8534DD2C434F3EFA6C94B7BD3485EB7A78582F459C6A054E126E18C534A2EC03 +D628846D3ED6A4C1CD9A8C9AA0639BFF5BE9788EDD3A24389AAF9E7D995EB567 +5E54C76D753154EA4A57CDEE9250F59ED11D12826D7439BBB7B70BF8F3CFEE4D +4DF2FA84E2F18D400ECD0D1A78AA64AA9F59E6B219F4047F1C16E861E74481E5 +39AE96224C82F799A00C0ED0FA0639680D067AFF647A1941BACD26F508AA6EEB +CB9FA43A1FD95383F60429A55B68CFA6410F6E80400F9AC9F012CCB56957CDD0 +B9093B7AED6E64971113A3E0F30F0EBBBD7C03E1ECC927BD1C88AA72E0D5D0FF +E7F814E3E29934516ACBACA207CC58B83E4C95882B7061CE86EF4D5E77653411 +0E77771D733BFD1B44CFA2460615EB10B1B0D593BFC4172DAEC9AF82B8C494D5 +4B9A1AB78CF03A6551F9F1B2D2F945524969FF5CE3796E9756902F2645465412 +9CBBD99BFAEFDDE78FFB6E6D8882C233355671ACA927B533B84D89680BA3BD37 +FAEADF8A1EE2C7D32CA2908051F9CE5336AA67E42AD842F98E8C5D15D1339193 +DA36217EC992E4A5CDCA0138CDCA8C80B419A990383E4DAFB7F06CE54C8D2812 +CFE50328396E1E484864A9674A24AC6657F47AF780DB3B09CF5270F6FB67F1B6 +3AAD016B2CD017C7D6CD5F7C3A6C39C9279097919A225431CFEDD243AD1C3262 +45A52A6BB700D5C6BADAC7CC5E325437EF1F238C8CE77973DFA2758AC5DFB0D1 +91874A22B11A284FD2685CFA01021377B7DB6EF732E9EA93FA1D52F604D45696 +397CFCE2E697B6D8845297F4EAA0DD8DFF3B4169AFE951EEF8B3A0091D31B4D9 +96C5B570E0EB109B83F26E4E2D38652776D7C08B8FA74BE4B5EFBDFF0FB1276B +C2C38BDE4010A54A2A787355F644CF95463B39C0F30912A18682CD389B114D6B +D96092257734422B9B94CF11AC283BA9EBF422086C34FFB080574BC74150B59B +86BCF45476AEB3E070173ADEF15F3D9927DD57898B1AEF83FDF158BB1C1F7D1C +36CF7974311E4EB7AD062FB94446CEEF7A41E5988EBCA5EE039CC187C28D1A07 +7153E501CAE9E0765E7108B3E54279E2AAA4D6C8AF8AE7EBB921A762B70CD379 +D8BD0C3C2A75D382C7F7CA7EA2386EB3931A013386DC15BDC0CA127DBB50CE4C +55522120A77DD300B20F014E5FD531B2CF7B64C60EFED90931B88D365E15F460 +3409DE0EC4AB6828DB307652292BC6E164095F10543FCE8183F3285A0F5A43C6 +E5A4F99F013328654BE25FF9F1A00B28C3567DAAE8E4298CAFFF3D23DF7042A9 +D16EA73CC66D766BF0F492B7FA78EEAC5F48AABB5CEBEB2EA12D4D4E236C0523 +45F3FA88307D43CABCF98D3BECA6B1C66D0E6E7728F9BFDA5F8B00BBB431BB68 +B07FBEEA571AC45DC2705507FA1E0AA56736E66D332AE7467649B01791CEF85C +9F5E61EED5917625917D54E64A6D311109C5FC77642BFE690E3436F426F5E8E6 +D1C7F0DC69F82A70A6C6B8F4EE56BAD49CB69A1095E9338DD02D0204F6B4A172 +65801587FF6A606854C28FA8412ADCB8C9037A75F11825A4B25358C99A3DB841 +C8A67BDDBD597BAAC92AA904D56CB71D7FBEDF3D4A28643BC0EDA94FB838F194 +B973AE5762FAEDDEBA5E1937359FD8A7322F8FAFC3A9D455CBDB14F871C07D7A +1FBBC2835BE086A6064CE3370C6309091FC1527FFF1737C320D6563676DBFF82 +5B854E07FDE16D2EC0FA60ED7400CC42E9DC3D9F393FCF8BF720BE5C40F35EC1 +E1AD3A43E4B4F1E6D9F517AE1AE8605EEBBEA5D55845C295B0819A0020124A8F +1230C36D82EAC9F0820947A3D6785FD9188D6EF4493CD4586DC64865CB524DBD +98A6184759803A89790C56FBFF78A6033FA8F9D5D4F4174A8F90B06199C6B64B +2F7F3E4834F08716DBC38752080C0C3634B5939DC11296A628B7C5D0EE52B047 +CC0D33E294787D350DAEF2B0AF65C41088BB0D45534ACC945D0A3AF72BD37244 +0C4CBCBE8F6FE5C750A2D6362BD31B0BD557B682502049B3F951DCBC2B5073DA +4B40A5F777461276F43795DA60ADD19395C929F7D7FA41B9E37468648F8F257C +0DA9512648DAF02FEF7B66BDBC0231457205A651093B5BC70574DCD97E81EE3D +024ED0F83F65EF66A6675449FCBFC8092F02029253453F3B76988E83EF752556 +8F85BA3C5C14FF6DC3BAFB4A70B3E7A52014FE94662E7CE2B72CED3850277A2C +10423E25A7F2A3D320D8F1E60750FC419C124464E59AA4B64ED94A92F68AA079 +257626532AAB68BC6BD10FE586388EF64F2813D6CA8BB62D34BCDDAE6EA29DC1 +3ACCEDF31DC9D64B9AF3D282CBE18344C70F6051900B11B3E3C463FEDE2A2CD2 +042C9052E1555E101B4914254CEB79B356D788D142B6101BF8FC2704982CCEBB +6E7A544CB6AAE38A8D9DB3A82DF63EFC3E8AE4F043B7821762C26F172B65C26F +A96C8BA3E3B863EA1E9A83D2E5A64E0C4A5B430F9875641E56BD57F964FC11E3 +46FFB31B0E1E4ED6982FD6E0924E49D59702A6B3E3201019B537D75C2CDA942E +2FFFE9E119E775BD2C24C53A65C602FCC2B2A5E9BD6F91D4FB857B294940B381 +8F66AC4EC56C14A87575F9C19729216D08896CD9DE00BB216EB775E15844975A +5BFD89F556FC081048EC3B6E6458F760741878F7D8BEDB7FE7B1CB31869B88C8 +E5CB264D335E0172D41F97AF6CE9B270EB0ED73FB97A20741C02785E60AFD1DA +C1D9EDEB1DAF0B0E08E8B7056415CEB973404CDFB31A56EFE4F561D0F16DE6E1 +DE0A6F3A560CF5B8092F7C394475983A5624348845FCE4D2A31DCB0097359329 +1A7236A7CED818C5C10BC32862C9A9483FC1B8D28A4ED48D142FB752BCB97144 +BBDDAE4444BE8CF003EAC9A72C81E5ED24A22C4AFE36137BF405FA1717E34599 +69CB28475A61A0AAC42AE1110A1FC7596EFB94D29913AB8FC433F021DDC99B6F +B1297B6D9FEC200EDB3A2C7866C9D48D1CD113894CAB558D1CEED46274F9664B +5B01ADB8C3D2669385B39AF0EDE82F2DC0B1721B87BFB8F8A52DFC012587E4AA +CB77D79AE9F1B4A363318B4D68B44B4B9138A4D164A8E6BCE52DEA85E420229E +AD6DDD7FA414CB3EB0E6AD6F320E2EB399DA2373194951DCAB8D37994D4CDD96 +3A0697CF3EA66657F3132A7718A6A8CA650E1E454597950BAC0D203E0D14E39B +488CCF015BD273DDC4F1962DFFB6C549888E66AF7C12189C4D322C46A1B94811 +4E68EC5FE69703E348C5B3E991AAC5A48F35659CC1079944F0FB00831E46531B +76DE3789894C940AF34A6906AE8E6519B21EFD8F0EEDCE95656E9F4FAF4217E8 +F6666CFD725AC5E0C8D84765B5B324D03F4C8860B2B67E110F5B7091D3709FB5 +01E70588FE0C48051A8AA4DE3EBF08052E1E82421B48B63D08427D3A8341D32C +A5099445CD86BFB6A7B2A325F766FD377FE664725E07A9E0C06AC677F716C039 +03E7C505D8DD4B53D901500893C9CDD5DD1741EA2FDEEE27D660BD74EAE458EC +1962EEF85B4F5C52A1C35D68AE3F0FA8E05D74685FBE82D5CE3B48DF42495AB6 +682FBD474C6A4D6D0B7BAD5A0C8B473385F9F20A6B90114900A357E8C3A5579A +EE7C17C5DF4580391B0BDB54095E6AFF70EA373BF6259B5EBC65DD04055AC8AA +A551C1375F9A5474415F6BE80DC4F9C33E90BD7054745A43E679B4C31976B677 +ECDB117F214BD226141F81E65AD48B9970CBF2979D480B25DB8EB8C4C398E901 +9B233314B0451A846215C9114651CE3B281BB456943E845D6991AE7E2887689C +8484921BB3628216A31845A956C74DE35E41F6A52732CE86363BAB159081AE2B +429864EA615983FCC78522F9C044C3C3243997FCD7928685AF789D10A4AFD65C +34B1E170C18DE780875428B197EDFDBCA00F5819DFEA045E89AFC4043C892F39 +0F569F2F9F565FA16DF286E9745CA5051A24B31B18D7C3E912F99E2310E61E02 +8F3815455A787CD3229C376AC2432BCD5871C7E4295904C631357A8F6D06B1E8 +832E72CA53BF79C2CA8CE90DE93C61AAF973165EC8BB718A9608610C57629469 +87C2AC93CE52DB00EF76C794B338E076A44ACF09D5F823757547850116C0C9F6 +E0CE2469EA405D8E1304268CD471A0DFC668A244AF45916028EC6D643DBA519A +C07E0E551B261247AD147A256A523040BC5D36EF8424BCC27D290778E856FD62 +30A17E2A55966CC8C9AAE4463CBC3F7A1C232BE92D993B74CCCC5A91FDDCAC20 +42ADC63A334B97D988FA5973D9B493C87146443EC417CF4E3280619734B07806 +3DFF5982DD1E262711383BA61D08E8E54F5FF58989690E62FC39C304186913F6 +27FCDBABA76A648EB4A0497A4470606E02044C4722ECC612FC8E0100ED206D69 +C9110C604EA391B33A63719D837EB628D8207F9A531977CEC0A5292C53B8B89F +C6A080D70D9ECB4D48153165D2E20F6DBF24E37F2BAB2FCEA5327E3670850368 +58276BC6BAB3D2A6E448DAAFF82D2B65EBCE9EFE2D7B906B14A21E11C3F811AF +1736FA7183FA883124028E0FE2568235447960EBA22EC16296F0DAB461339F38 +62717140B2C30BAB034B97C5007655B26F402C9559FC2E7A0A6A8881E30DD364 +D1DAB7D6C212813E11FB38713572749FD38ED7EDAC1C7D6BA1247362CF12AE7F +34DC3C4520D524F06107CB51A064465A7A7227BCAB01C84422998F9B53BDC547 +49A357A3D779ACF4F351A8A20C95D08E6930A2C81614B0424C1577B3A2DCE0B9 +275A416E789C4689079B182A5F81EF8642CE885CFC6C5DADAD8F9E4E088FC0B8 +8D1444D811ADCE4E886D03D2B055042B52D900854F44BCB6C84094A6223699A5 +68C7C749C9224C42132CC1A2162CC1388D42AAF7CEA313CFFC773E3528902080 +536948BCEE07BED5CE0311A5BFC377E92A44BEF9ABCDDE0EEE11E536F529E85A +CBFF27F0178F00608C191847BCC717D46AE62B8C3CC5F9AAF01BBE1635D94E1D +701F54EACDE52AB6670632E496271D1A2A2A47F08B85F6E8AA6BDCD096250D49 +7DA3BDC2CFD002C0859D45D8EAA340FC8BCF33471B7EAC9DC43A870C06584E3E +4A5FF7D96F7601D0DE362D5D4D2555A2E8E297145695C4F785B97AADB96A0860 +C93C934B4EC3502479F875E10D9618D349BFB882DD82FBAD6CAF2497654A549E +D61D88D37F36F379E4876FA0EB6AFE12B95BC6D4CAB5A986A6967EA29DF54880 +B4B12A9F2B79A1834A5CDA98B322DE8AADFBF527C2919B8A3BCDC326D77E76FD +73639226E6CC218220C9D830FDEAEAAB7AF5C0D1328DE62564D95BD81C835B06 +BB8083E57135321AFB9877E08CCB020B0C67A9DCB596A5F29080D60EF5D0FE7F +6B79C5ADD43BF8E7EB767AE4C5FD61B5272369E42B73AF889E310C169E38D3DA +4A261ED657A7339130277C0F9EC6CBEF69472477B9212C81A61192D3E0E46686 +2641182C16701ECF8409978E2CAD7518012658991E57D28E4AC66D51C5226424 +02BECE6555DA1A22700A87573E9AE0E31EC99A8EB5CCA2A993A4B10EF7A3610E +DC92826DEE23716AC8892BD57E19BC473DD05D7A0E38B002CD41922B38269974 +F25E522576CA16BE833B451D4D1AA1773B37C5697BFE8CD84C9E2E9D56CD2725 +C4A1877B40E4767984FDE1C2B37A9725C98584D3FB294C4246881AACBF67A10F +BA056B5BABDBBC3FD8703E6FF094E662DC8A2FDDA6D42A53B20E3C9F5B467E76 +3059367071EB9E000B1935CD542FDCC761334C7B7FAA9D92C949B307662FD8FF +953184211C28C17A87A9857833551160C734915CC955E2B100AED778708B2234 +1DA4CF42420E2F48AC577E37B0215F963FC7844BFA15ECAE83245A850F41571D +7EB94F24F517ED326030FC06C0725AC234BCA5EB709AC94D87852024F50184DC +5424EECD7764A0D20036B28DAD748E2084A0CF1623CEF44165CB787B3CB1842A +47468B5D75B3E0AE1887DF58F7939BBE8907FE09C87B5DC7DD64031D60B972C9 +A2701651E350B6FEA8CED3C1026BB7527CEF496C5B6E9FDCDB90BFC820885F86 +AEC5AA8A1AB6646B21906C0CBAE9F55BA7F19067197EC9184C35804E0E5F0CD1 +B04EC4DC38F49B8A5A9C19187E1DB5CF387A938121F184AF436D7EB5DD8FA12A +9FC81A6A033CF6D578B70359158C1E2D6013618F5F872B52F4FF53918D7836D2 +09BA3CB9B54C136B8E4C88E87127470E6455735969D96FDF80F676861CA1B3EA +C0B660713CEAD17C58EAB552121E1427C88514350BD4764B13E5A9F7C4743036 +43C5366D8E21D5A671FBB8FA9F2624F12CBCD6E091CE2BBDC995F22B5E8BFE79 +F004AF81C8F356ED727FEB566FEBCEA9C3492EF8DC96F2F577D83E971A04259C +D4854A8082B0D0412187D52A1577258CEA6E5C9C7285A5E25F56D7E6174842D2 +6A0DE01BFB8DC07C68D2AEAACBF689B2E04B331688F34905C70FE440DE181813 +0794D602A78DA154A0E645A755FE24E9DF53A8B4F088FE37D2605ED5ED7F0AE5 +F6A6FB2C217F345655B278963C63824D9EADB59C7B1162C34552458D07297E96 +2E5AFEB35AF92F1C80CA21034D1ADC6ACF5CDC8A222CF4F99F7A18835F58ED6E +1F6AAB4C9B87B871597FEC7DDC2E1F5FFA5EE99DF922836271B4A8FC656E8B54 +46390B875F620C87C91770D9680014AB56E3FF4DD716B24C37974740D64F8DA3 +83090823A2603D738C2BD6D0B5D7AB9327FDD6755D8F7F5A6F1AB1ED99ACD70B +9A484496AF0DD7C685591A9C9E68B4DCF72EAFDB06E17A1AC7DC52B7BD1FFCC9 +D9BE7F1B614D78583FB226AF258BC38AA717495F69A6F2A07540751777F8F5D6 +48FA795F46D17FDCE22A2C24C90405E24A7A8CF5994216850FDA44F072AB1856 +6C3E4BB95CF70387C627A92BB98D83CC90B20A9DB97E812C04B4A4CFB13B698E +364716FC614B11DE2E2E005825F94A7EEEF36BE353DDDECFB6E6DA6B5F8BE620 +0DCFAE92106A75B5930473286DBF79ADBF6EAA24CCDFD78CBCD044AA3CEAC5C1 +28552ED49D36BD421A7F8850AABFF7BEFDA18E2947AB2123AFF0BF96EE9B79F1 +9C7ECFEAD3C0019D2A4B3D38B748F8CFA2DDF7E927CE235B7EDF0D1E537BC93B +49D338C3F7432849BB6D23E9F9156627EEF4B450C24272A28DDC49F3CEE89962 +31DE631573BB6E668F5D957909DA00E6709A98ED6144DEDF200DCDD2831DFDB0 +DABC6241AD9C20F19A71435669C8BE538F1C30C68080100347C24B57FE747D6E +B4053F7185BAA9B34EA42945212026AA852F9002182C8834CA14331792901E33 +FAA0BE73BBA726223FF2568281EF66C01A5A607493F0CC5EDDE04C1D5A6524F4 +E7D9BE4B705B73B71F2CDC2FCCD1D4667386EEF0D7040BB168F26A123A9367E4 +6CAE6F5FEAB9035ED8A33D2990624A49B63725E56D509CC674F517A288DE55A5 +D7BDD56550458877C44C79F2C074A0846776C533F675DC7DAC1E29A3A3CEFA2B +0FEC3C803FA8105C6FED3F7057C9EC2009CFC0D6FEA28A074401BAC04BD8A263 +171926C38F07B84FA04FEC39815E22D9546307785860038F3525EAB182282F45 +1C05BAEBC80F28B606CD069ED3D56C1595DFA3F6E62165DBF1EFEDB802455AAD +96F10430ABE6C2DD44B1F4FC13CC5B45EF3737C272DACCAF2538C3BC50E80C62 +C866714B08347B11F8E891F8168F7FB9F6237A1C2E70916AECBDA1516009922F +F4D3FE0A3821732AFCCBA5EF377077CB470C271E14DB53E89F5204F925081159 +1D3461BC0A6BFF29E96F6B10760C3DEFAA87D1755F50C0CC1C0B40C08587FDF4 +32915F8C54139F71CAC33B62D87D322F2F14B8352AC8FCE60F59E7B63DF0E3D5 +E1756D0B70565448B6865136385CA8C2FC8643C49082660259402A42D3F3A2BA +0788BA660E3C1B5C42EE028B111606C802E964DDD644435758E05E87B4442C3D +640582C97265F09BCCE96F3ABA0CCA9DB76326AF0282B4D4A6D74E84AC0B6377 +5A0B5B5C9758DCB9D9F658C4D773FC4083D911450097CD4A93B504BD6515C0BA +D13BAE94B40980D1898D1A6B4075540E9EC15A80F20590B5BC7FAE201DF0E359 +E7A65F856E80BE304086DBA7E958353AC24543AAC9209195DC68AFD46FF165FE +342BBC77CF2596578B15197F6A7EBF94E6E76B014817E890677C83EB419419A6 +221DF308522D945B5ED34A395167476F1F795AAC0AA84C190C353BE149D50D99 +F8F5F2D463CCB6D4C3BD53C0D2FB668D726140295B0255BB8B1A574BB3B72D61 +1C2441DBBED31AF04911F1C92E6E615A51C44D7580D859221FADFE07FFD9AEB3 +1361A8C071F1DA5F0D4F956BF6C1ACBC1EF9BF3B6C276AA96772C8B1570C0E7A +CB001B497A61694344B665B6C8EAB0385E1B27DC2AF97395E0C7315F9EB780B0 +9FD3941132BC2E3E7380AF786BF395E51B50C1DD9F2081A3C4A4353BC4C2BF29 +E11A522E62B335ED896FE6CD9BFA9061CC9F88CFA976BBF50C75C1D0A788C47C +C04002D700AA65BB3CF133304F521D2138108EB7062DC6B430DDFA8B2D9848DC +9B9CB14E3153616229DB50EA2F99BFD76F1AE1F7138BB20EEBBEC936FE2C3AE1 +32E23DDB9EDF4FD40BED50913C4516F30BD1C9093BFAE537A4AE4E40929AA924 +A82E9DCE7A9E5E657D000F958F8DB7F0D8226D2C0AEEFB2F837A77E7C2BF760C +6728AEFE032A82125B487EC4355DDD9DFB541DC313992CF1E204AF8714C740C8 +B096C87DE1000478FAA93C0966B9DD0693EAB6CDF30C1507424998C9C64FFF3B +97002CC08ACB30F05222048EE59FF315D07B458D992365E0EC0C0C8860269A86 +4562BF2F8A561CD08DD5C16625FD26708E52A8C6FC065F4CC11B8359695E2B66 +2B712387F7DB0B4DE29ACAA503D84B5251F3CDBC64C0B24EE759AA0483BFC67F +EB0826C1FF9C4102E2E55788BEE0129731E74F7A1CCD8EFF687D52C36C5EAEAF +39A5DA549C84DC7C2404ABCA432569860F70CEC5C09D5F1F6F7C8E771AE47E43 +E0A6EF05B0338D065F9A3AE5F5C802D8ED5A87877E491E3D0FB1C199EE9335E3 +5E6FBC17B4C33EAB15A6CEC38E3794B96E838425D7CC961A146808B88DE353F0 +09F9813831A6065490E1D3516467DCAAB8B508FE8A24357CE001CE2AACB7117E +BD32D2B3818E7F205EC2AB344C4F082570F3955692EDC670EE21A2D4F30C4D2E +5314632B7FBF2A5737D8749281F41191562109809E45766CE933180C0E5AE101 +A857E96B1D52FAEFCF6910F1A241C8EAEBF6F5CF73C5FE84EFBB73BACC47DF16 +4755F72E62F669C157686EC559AAB485A132CC47D0A34605C06540EC7BE0485A +BF7653D4E191CAADB45EAF770901A9E590004524CEADA3A90D644392F2E24577 +9EAFDE24F3FF88F54EC4E4CA70EAD012722824C025F202076A33C48B06379F89 +6B34C0D0C4D7723B5C130767C64ECE0D40F7AA07676391831FCA5BB4CEAFBF06 +FCD07570CB9FED395B2F34F2F06F405D94E8CA048146022467BBBBCE9A45D8B7 +A5F0E76AF213C54B6C0E071B6080C4EB603F6ED7B2E3FB7B250DEFAE8F6B0E46 +603E7E5AC92D01AEA2DE6C858D2E8E644C705047A3720264904E407E0990C830 +249441336188E63108CB8360774CBA9812779156AF52CF9E14F1B25F19EBC646 +3F97ECA6E26117065EB974098BD7D3478FEB9E69C80956AF7130B6414DB6A7F6 +ACD38BB0798D8E805AD4F8E0DBCE8A2BD64104C9476AF18B51BB62942541A8CB +4769024A2F0B83229C5B0AF5E543C4E4E38870B1F3748226B65602C5898C317C +0984F152FE7915B1A4491290BFA0FBC91D59F2D58F0A0002EFEF77F1AB0AC9D4 +B2B1EEF4734ACD37171EF2DF46609B929957F1770D539EC3DF3018E33E3D9D42 +E20EBF54A65BBD4605F30AFD12638E768507D92A4D4CD31B146DB78B75A4F8B2 +3D1097DB4730CD3A90566987EE22DB64B2B690AA49E38F97D9355AD8547D1AAA +DB256F41C2AF211BE2DCBF5112256CDC9DA80DFB1C7512E46BACC94DA61E141D +647C722A913FE8286DF36F3D64ED7103702AEF7497AADABB862FD61D36FEED9A +B3D130E5ADBCCDE21B58F8EFE6A36FFAC88846D2FB6E39501FA6FAE4BCF93B6A +4EB312B78FDD01C3E6A93072FB2707D44001BEA2FD1756DA7487538B35FB2583 +004331E9895E34CBEF44A061C56E72D841A9DA7BF779178D6D0C8FD5E173DB76 +381D9549F09D5297900D73D4D5C1863E7A32C582C76A029B0A3DF60AF84E3C9F +16E8BA6B4F035CB72897C5E400C535E93428DDA70EC35B4598B80461CD3A3CF5 +6AC4E410D10D78169481F83DF3DFB33C68060E1CA2044FBE8FBFD8411D811B8A +69736A3B58FD4C8D5F68C9F1B83BF5D1138E8387A8E04F630CFA89D0BDF3C9F7 +5494496DF6E70C8D01CE604B376A5C74C1976A54E662262BA8024ECD6E129C44 +4C8E07547103C2F7687019F585D3F8878FE9403621EB3DC7D85C2C6F30AE23B4 +6C450BCF969B3E31EBDC468376EECCA3D062F7C59654818DAD9A0912012CBA1E +54721C01D4558E2DBD7CFB7FD1E02F1E7F725A181B642B1E9877D715480BE25E +6BFA7A3066216EFEEFEE483843F9C40B5EA04A405ADEB25654A33D1CFE16CF76 +2FFB5A55B6DEBC4B9524A8263B49EAA9A9B40A05377007487BA5C504B11CAC39 +87A0BE02DA2CFC31A8581D619CF49F5E44F58D74A03CCDF062A11DE29CDFD36C +6A68E596E5A71D2C13B2B67D2F9CAC94A143D4D070462D87709DC8B4CECF7D33 +9D4647F496B9F6EA69E61D697ED196CBBD9AEB6345A59A2449F77A387339E501 +E74B0F079CB2CB703E3EFFB68285DBDF3F331602FE0FC1F0F2EB38A6C477A78E +58C24DE6381BBE6F7B27B78C5361816BA08A792D7410BD44BAB2766B1A81239D +EC2A59B73405B412C2905A45DCEEB97794BE48E19A25D099578D1B8F35152362 +D618D20C644ACFAAADFA17E4BE0C7E13709E4D09EF47426CDB57186E86C1E909 +A35BBE68B667D0882CDCBAC54F8CFB8F647EF13A302BB43149F9C332E25AB9D7 +7860B75D59FEE75664D78E253B4AA3F54250F4A79F1F46ED4C59B9F847521E78 +02B0361113A5CB83C17CE2BD5DAA55FA3ABFF44D86FC797DCC1F99EE8CB4CBAB +CB8615FF6A914D179AC027C6ECD688206DBA54A2531F1AFBABB6883557E886DF +FC5C71451BEFF41376474BCF24DF6E91D01FF6BC178ED39FACCABF65C1E24E30 +FFCE97516333FD4D27E1ADB0B91F62E8305F8C153CD378F20EA1D2EF962328DE +5D0FAE0D3996E75042BDEC5B9592F79EFEA5271F032039F412F7C213406A0568 +46ED642E9522AC3B33E49F47DBE352D9AACD6E36EE440675DBF404BAF986C51F +63091646F5B33E6ED76A029A7E89CC774F797222BB96B8735D7726F7FC7F1DBB +6085A1899995C603AA59546562B354297ECF3A87ED8C2DED3A3F7BC6B74C429E +15AF13B52DB9EF3494BEF638403F91CC513A578856C0B466D6B3523DD4571F2A +17E508BA1D5EF953AA281B85095BEF79F27764AD20AF1F506DD2E717BA54795C +38A64A5C41DAD526400BFC079482EDA8C4CA95A629BD9C11BE3B64166662C05B +6EC997E65073CA80D5709BBF90D1776C7092C61E989F75E4F7613C63E4495639 +07D815795122528D2FBA1A27D2B2188B0E51975FA7BF2D28130D1D1C4339320A +9199A9BF24A7281FD18DBA1E445FABCF1832D125330E64FE673554C44B4CD26A +2186ADF57793CA017167E6699567FF5FA0DE8687F86AFC92A263BA0FCA0A8DB9 +9B16311E613472D9FEC5BFD39DC268E0A2D760BC19F6ABE0358A32244916F089 +0A6D203D2AF91B9F3FFACA55A9F6FB6B2EB32D3624F12362C09E600EA7A0A643 +DE2D6AD0F04D5870E52F2D1CA8179EE3BB9C8323D4ADD3471CE9697338A910D6 +8A79B1719822A5864F6E93D01D96E5252DFFAF076A11D8C1FD419E3D92A7A023 +1167DC9F87B1355DE64859145D188622F5007A65795E1DDC991BDA29C627EF5E +CF55E60EF9ED9666A5E45CFB9CA7825D7E0B679C0D5FE02EAF80C12D14A86AA5 +784D77BCA5DF9744A81E68F486AB0996D5DAEC32A1609A718D5FB86663985F50 +8AC1CB89A2A3CEC73323E495BC5BACC411B3952C8AE37D84497CA3075ECE6AA3 +A4F252A796A4CF4EF6347891FA54E81A21121465B46DF88D590CCE159D0BFB12 +246D35E1A6F369E47B5C5CC59FC5BF78DC2FF476D1CFC3C1AA14E6CF679CC658 +0294E5622E6F392A0BC4E7BFCD3E54B8FA6B7E476BF2ADC67EFE627899BA746F +0C7312DEE1DBF8B71170EBFB4C3DB37609F3A5B6491C781C169C46B65BD4C7C3 +8520F297E1C25749EEEE7C92FC9DF43533FEEB00132CC1B5EFD7CEDF2534B256 +912526F12590D8A23924C26A22E8B0F3BBA6DD83E727481F6187C4FC0E026F3D +7EB38E72E1ECC5F4758524E6AB300CAD45F06B34E660233E4EBF73004A6E5D28 +F80822FA405CB830C25C6F0D75105DB8A3994BB9257BD1A39DAD2AB2BE814BC8 +FBE19C3074799D30ED470BFE77B4D484A9415B52A4B3B748294444831469CBE9 +DF73B2B96828273266EE1CE7E233E574F7B2D21DD7CD5E6B755BC54B78E23B62 +E3708E8BF213C0E5C3580968CFB0124A91BC461A7132E135F2976D8D49CF1564 +ABA2E715D31B2A9F951677F9047B6AC42DEEA1325E63472DAF7374E6914C554E +5EAF8654DF454C89850FB57379F9EE2FB8BBA4C1CE06E5A689349585BDBBBEC7 +0F0C29DC31C97F7D9637B673F03973ECAF59FA4537A4A91B483DBBE0FF641DF6 +C32E7CB0E2F4783CDDE88E9B71656F8A38D39106263E7D812CF8C9E5302F30F3 +B286D28D12D34546D833D63EDBBD301A32E4D84A49ED74020C7EF8D244A4BD8D +76092C90A9C46E4DCC985DC9EB98ADD60AB42D258163A585C2E96A718B1AF3FA +F82E65D3F5FA63BEF81D635EA40D715B1B8D41E4680A8FCCC881DF8EBE280C51 +9B48514A93693F22624B60E6A408BC4B6E99050533136B7A80BAB4D556D170DB +37943C7867E2F360CD99EECC0941ADAB053C4DABDBE5AA7C51CFCDD5F52BBDD0 +0435513D1923FA8EA278B434D98F5C38BDA87F5FA804BB9F3531FB0AD92C7091 +36E169A7FB8DD656EAB156CA53B0AE51AE1BA0D9465E0DB14AC6C9317D599B2E +02575E1EF48AE6F9D37DAB1D2FBCC9DED16CD08D031DC37509F2DE2A1C75FF44 +3D27D3190EFAA4862C8CC17C5899E2D06758D0CE4FEED4B9904A1B5C59EB3BB2 +2CCB6F94A1068A2C0A4312512D09E8E131495F0778B147700947F137DDE49F09 +C4E98C9D09DDEC7BCE2028D8DA083005F55DC2F7955F09F3A302B94F14C6BC61 +F676B84125753E175FD9566477F456E539C867413F1B0C2821A37B504D03149D +733E17A4635F3BE3A99F21A00718DBDDE36890735BBCD5FD6B79FBCC3C58688D +5AC44904089513A146744DBEFEC3FDAA82AD8461064B9CA1F53F45284B565949 +0B5617015FA25AB2F38DC5F425BCDF2B3C3E49ADAC1B74F7FE737CB5E961B005 +55153B0DA51CEC202416136984D640E7E913A37619150D45593505DDBEC9D461 +A4CB8ADD6F0816DBC3258C39C26D9C23F0A83BEDA744FFFB92BE95862D934084 +B02D44CFAD4AF3F43A358F21C3665C201AB87649CC9E6B03008DFAD41533C335 +9271F6212F1A3A4CAFD8FFC77393B0F434424F345687D60692E61294B59BE135 +A88109012E14C2602B72C783377BFD8C6E08392DD4A917AB29E79D5F470D60D1 +09F35A4C53A027D1B037E68C746D9EFF59835A58DC912864D266C0EB6E5791D9 +A0FD39024A64C1261CA7D9D4E396241BE808E2C0D2EED9BE545954A02F0B6E4D +63272D0A4BAF74A66A9D7626A6AF21FFD4FA2213D524F6784FF3CAC74FF74922 +A4F670CF057032D3036C9A361161BDC356F7AFD58777C90C8CF97776B6D910BC +405E1FD7066792CD137F7E3D52D0188C7AD1BCD67F72657C2F5F4AAD4CF465BE +A2529DF2C60E9BB834FE5DECD16D1062095E2BA9D9A316325AF0BBD3800F537B +9FF87C602C104655D2E8B28ED276F20869A9A97244A4FE1705C6D2690A743559 +A57790B86CA7C99FAD6ED5BA19A5849CB4888A35302087C015BF38198149936E +76AF06B0EA8F51C90D2D70BD3D1D5711DF6C402CBF050FCCB1BB2F148FFD3698 +EC950C59F65BCE68F22029D6244F6E585E160E235E0DAB7BA440FDB7CB21F471 +337FAB834131C78327A7D6EF9415F5294DDA616B17FCCA3CD94853C930BA5836 +343EC14E60986F5F5A6A5D6915B1C968025B5CADE5C5EF65B0222B81051D07EC +B1CFE4BCC052F4AEA5D5A3F1D2C0EF5AA256402B0BE874DFA9C4D8E9BEB7E901 +B6E98C58B9BC7AACC592B716D8BE64B9322FD7793B5C759D9B2855E4215EABEB +AE54F9DE651E7A108E444F72C7333C10739FB44B69CA887D2AA363A0D3B84537 +705EB9B3CF8CF4997917D5D57C9509DC4DD1EE8D03BA5BF280CC89C8DF317A1B +54AF2A6E11630F56C2AA9A1A8F05F49D9BEBFDFDBF163B51D3916706A01B5D14 +E9EB155060D09A61A8B302FDFE85C6D62A3FCF8AAE3C525726802F8A1CA5813B +F6121ADA8486129AB7A792E791CD6A8987B747F6833930C503D6E530B4B6DC18 +87B80CFB0AA87CFF8304C4ECB8A2E404B7A5932A965FFBCAB12BF7B3EF68E2C5 +AC089CD88DAD97E6DC4359FAA7EA672DD787A69B07B477D8BAEF29CD1EDD221E +AC3980B3D74523ADCE1ED4D5E6426355C6B2B5857359B7B7707ECDD4501A6B70 +55CDCD0892D1F28099C331B3A5B3CEC3524189B37AF696E8BF2B19183698D42C +8D9D7294B8A25933E70D514043393CE83CAD9B669D5B65277E1294979C8B5733 +510EDD4915BDE3FA9B57EC365662C1B4F3A2276E627895DEECB32E5B05ACAB6F +BBCDEB32889F78789862FBB3EAE77E16BD5AF534A3A04AEB484BD500FE942C37 +735FA0C3D274F48F96C1F52FCDD1C782CF810EAB485E7D28D6D3A95E6FEA264C +2CE8F66D9A988D3C20A8857A978F48CFD79C5049E6AA36C71EAE67C6A3DFDC81 +7FC8D6F3025F7DA2F700B72F16E32A379542F7A9261EA1CEACDFD567B563CBD2 +C7B6870D268747D778545F33FBDD128106DF455DFF84AFE5DEFCAD295CCD5941 +69CEACC1B3AD661E54217AD7685DE74BBDE56016F3E8F197EFAEA6E00FEF4B27 +E6504856A6CD4CF3299BF4257A114CDF40874009730989A4A2E0377B6E5E6A62 +452534218DA4FBF9AFA443B1B86986A9BC2185DB02A723502A1936A33287A850 +F6C2DD755B62DB4B481EF392BE9244D08826287EB033DA13E0FBC94132874112 +C1911B39542805EC001E45AE4B4DF452A77B72DC3EF03349D0092A08031A6B12 +3D18BC428FE3CCD6C0446ECC3505248727FD641455F0ADABAAA1AEE0A8B3D00C +FE5D6509CA929CE140EE150E790792E847626F98CEE5E17014A0F0F474276E84 +622EC6FA348E06115BD2E4B13DB02F53D072573D8479D28C9529ACC224167D2F +F0DBFDED9341F6491555331FBCE012033CFA627DE88AF8E25AD19DD4271B39D7 +60387D59062E34339A95AFED386833941380127CD9600E7E3F3A27BA9ADC1D35 +EC725EC46BA57A63C339E58066FD385583E8958CD45FA99BC77E71FE23E1E338 +E014A99AC3915B5FD331BC2387F9FF93081BC0244D03839C2ECF90BEAEE7E522 +E65C1F0F2BC9FC52DBD7840A0DE37938419177C6EA2CFE705A804217656521BC +FE3B9A64D83BE3CB28E8567689A5FB632A7C0FE2D18C70512EA4D64F87E774AA +CD3AA031ACCD9386744695923F0344103276C3AB6F3741AF69604C519901446D +3A12157DE158C06B10BE262907D9AF95F25E9D6D3FDC5FAAF92F3DE042A144E9 +D923EF6317D30C115D07E7A53A9356EC375882C8E6AFA0E7A9E7549368D68D79 +4660168DB5E0EA39B27E9ABE37D81830A90902ACE346336B4A3553F96FA27FE6 +B0D872ED36B85F2C00BAE0EABF40BE377EBFBEBA4BDC7EC9B0E09959CC43988B +CA2B44CA18B10CDD9DEDFDE8BF59214F1D9E5E585D457B28DD0F94BCFA601123 +97F94118E3A61E67E201C14CE07DE1DFEA766B7AD07F292267E5EC374F9B9395 +6D7A3161E903C0D9179E423A98AC006D9C0CB07CE874AE3D6716F05F76409289 +83BCFA351684D5918BF0EB05487D534614C3262CDC7FFE1E67D6EFCFA7504C40 +8940691630048E7670347EEEE1F5FDEE09ACC413689374DAB4C08846FF2C3EF1 +CCA35E50D820BDCCFD9B41373E2B69C5A391AEA1C98CC87E8404F4DDF79F11FE +07C6370B1BDA73DA1103B10FEC9374BFA373416F7AFE313ECD78914E167B4FFD +043796AC7A84C7D0490EB03645EE5464DFA5BEFEBFFAD7ADF83A2FBB315C62CD +29781BAAF0950D71DD863E0F304B214AD56FF42F10F03DA3884A5A30282431DC +85F2A3C84CCD70D1FAA62F0F4A71FC647DBE78437D96E52928591A2157933FCF +F2207083D262984DE8B112A5C210337D177F44F9ED3C62A76D9482122E89EF48 +B5540FAFDA5FC8CB78B21598F7A1A97E90D9E3899B92D84281A1F0C32545C153 +3C6024A3775936D9801C70CA6F91A44C802662A6AEFEC44003BA151459461CB6 +74E74195259572 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.0: CMBX12 003.002 +%%Title: CMBX12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup +/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMBX12 def +/FontBBox {-53 -251 1139 750 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX12.) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 40 /parenleft put +dup 41 /parenright put +dup 46 /period put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 56 /eight put +dup 58 /colon put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE +0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D +2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 +1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C +42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 +FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE +78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 +22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE +A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 +4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 +4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 +95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D +9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC +5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF +9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 +CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 +BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 +9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 +EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A +D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE +2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE +947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B +0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 +4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C +BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 +F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 +6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 +D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 +F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 +481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 +FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D +419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 +7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B +70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 +2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE +0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC +9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A +C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D +1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 +A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 +21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 +7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 +17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 +30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F +3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 +96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 +B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 +1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B +57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE +B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC +8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 +8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 +B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E +BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC +21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 +D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 +FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F +A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 +A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 +A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA +DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 +7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F +07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 +BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E +8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 +E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C +B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 +45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 +2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 +5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF +A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 +5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 +E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 +5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 +6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 +8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB +BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 +9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB +B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B +B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E +8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD +595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E +FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 +13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A +FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 +DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB +313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 +C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 +F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD +DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 +8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 +E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 +A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 +C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 +417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 +19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 +9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 +12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 +3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 +A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 +90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 +3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 +B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B +82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 +1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 +AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D +9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 +2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 +99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A +31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 +3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 +F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 +70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E +5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 +84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 +BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 +8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 +5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 +9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B +F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E +94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE +0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC +E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 +7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 +596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 +F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E +7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 +1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 +AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE +4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F +744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D +67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA +054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA +6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B +8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE +CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 +EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 +C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 +57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 +5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F +C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 +CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 +848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C +B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB +77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 +87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 +3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 +409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 +A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B +72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D +99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD +8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB +E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C +82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 +C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 +EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 +23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A +59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F +C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 +1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C +403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 +1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 +75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E +0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 +82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 +C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 +A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC +9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 +0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C +5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 +62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D +6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E +1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 +648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 +FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 +754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A +E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3 +C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055 +531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F +AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB +BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13A9 +C528A198B8EC8654AD69CCB5C209964A2B25D6DA9BA0FFB366D19D8C69701D7E +8ECBEA88569601C80E19A4165AC73F32D0ED08C8FD0D0407325DFF60D69BC8FB +95D27536CFD07285E9FA0E957BD98B45C2E7A24AA33635C6683B801BC89AF92B +57BDBD4C4FA2979D6344AC3198440DB1709FAF1D9DBD7EF56D6161464803216E +9866C68434A3533C4372DB3C1CFA11ED5321C3F4CE7CF78E392506AAF7257AFC +7C9AD27EB8EB637A93384B54EAC3BD084571DDF97EB5E82C643FAC667BC3DD3F +D981A9E0DDB7320B07F23CCFFC4D74C034EC6C36DD66D907A4D34CB94409D362 +04EC03D1FB2A58E607C6ED3FDE67E97D9446876F6C685938EAC48CFE4A228E83 +FF5AEB1A4FE7EC29B33D17293570D43B501DA206F7CB0C5AF321C58E21F739B3 +49C19AEA6529CC550471E98E84DADA143F571A340759AC0809A695A56EBE8BF7 +6074197773630952FC57B9A3EE95B0E63CC4474A6ADB4D9E7FDD3B2B35294CC9 +D9F6B1C2786D00FD841BA8007988D6B4DA71736F63B1BA028230C46B0AD6A6AC +8126FAA43863ADCE0DF29E8B4C9EF15CF7D80AF346C45A9C347273FBE528E1D5 +389D396B339BD8129B462513B063D931CCDF8F346959483BAB970A4428B9EFBB +0773F9B2DFA2D6566AA2963DA654DC21F8F11EE928A083406353DEF3829EA553 +EB6EB0DAD22A4245AC88B5C509DF6C290D93AAE1E5BE9ED6BDA7D04AB0B0998C +A1264CE0025B1B2E2463A5CDC5CF0F60AA49AAD32391A5F97E27115223C6D1B8 +CA9346C5E650DB86749EE83275610023D41A47D0E5425E74D16A6EB98EC38C6E +00DFCE06B41D2FEAA761F5102718086A15E02717309F7D3B6140293E4B1A46D8 +6E8FEBBBAD104DFD4DE26B87E61A3C0043AC2C2DA283E1167D0E07DD24C80C94 +CBDDC86A09F86E651BAF3E059217118A0408612BAE85E4253C83E3AA5066CC08 +7E6528CCBDBDB5A63297B0BA85E9753B1C968783835EC4006D89F51C3E7D5DD3 +31C9CBC83D175E7832A643AA617DC3B38D8BDC98B7E806BA0F224E8AB73100C8 +A7ACE961DF33A8D97D6F86D5321B57EB2055525ABC17B676585E0DF57FD4E591 +1E6E9C8FB7991EFD37827EF2620B4BC0FDE501354F8ABD9997B508EA7731FFB3 +305944D9A5D4241F0A617F28587E7AE09F73C60B4D1FA1C37CB23B10A8E3FBAD +A2E067B24AE9AC5715F62BD011EF14B6DEA21DA0F2E8BD27C918683CD1484950 +2C5DF9BEEE20A2F79E60B803E8E3D47DCB19F8F24AA44524361B5A8DE4017ED1 +0A04EE08C9E9724268FDF318A6D037F8344FB9DD23441CF3ADBE7EE059E00D4F +B093E7216014B26A490F3779DC5E0D60635537BC8B0B681A20BC3106D4904947 +B6E8F68EC6B10B0B8D1304273BAE5D764FCB8A1C33CB55CA860258773A3C4A67 +794668D72813A662BA507A1EDB1316165E5148822ADAF61F31C8B4788D720A8B +6437E764CCCDDFB1206E7B84AF01BFCA1A695B75D96C47DE7C62670DF0FF4C29 +D0340782B68BFB6CE59C43F54C83C645138BD08492A5D8DA321703B4FDBE8313 +A4C6A13B04618755B5DA2C506CA059B87DF17085F1181FE5A23359C2EC1B27CA +E60567F112BAF14E9DAE8B749D28BF8263866E9019A963884A2DBF7F1F0B4A4E +B7C7A0E084F4A8F76EF5B001E3052DF0CF80C56DD85057073E7A1C1FE182A81C +B72098679C11A375F715270D5D834E94EA4F222F7D3DBAB1AB1AF1EAB16E7675 +42C5985A38613C54FF89DAD80417B054A826D5B6F47CC25FE6C5E831447674F6 +E7D0637D9E729D1F288075BAD89588DF7AEC9EFAB07A2B73D8245A4990A7DD94 +11A1D63F6E1F9934A807BE37EC1A897EFBA4DF6998C910DD75658BF6F133196F +438C818B549AC11198008DEF1548AA8DB6CBBC8980C96513E790F19CC3A3C151 +1B12A9B524F6026F3551632A3BA2C9FF376AEFA6BAE9D99A990D6B5714C06D3D +8F68CA21B985E93B0FCDCFB8A39F8DF7B996310B2C1C32FAE1189D6826363B69 +AE6B1B7231D8545A0863B20340CDD552B304B98236927CCBA7BABDE112C25380 +2D08885E8AD17C915908BBC9786D595A0C33A4E7EC1EB66825AE036892DFCB32 +F0576B232F99D99AF3E45D1F26FA0DAB711852AAE2523C6795478BA47E4883FC +92A1223B740DF537FFCAEA617CE3E01DB8518D1B4F60633820F0583187D99EA5 +72E4CECAC883823E5F7EFB04E211AB3D3362FE18F9EBC87470E3C62AB782B5AD +518B69458817EC3A7B8B026E624AE303D18E9E18768F3D3CC978DA4DA6926738 +678E2F96F751AC5F55FA5069B815AF3E06071937F0D013EB7791E718899D92E0 +F13260F6A4F8D6B0BA5405523919E543AE935DD6E1121D4F2DB2C46224CB23BC +39D8537A61DE02008507809DC8906549846FE92F4A835E2217E45CB52E41C696 +98171C24A8F4EF4539F8FBD56355DC995E6E2033E6CC70686CBFA59C19E29A08 +3FB507DB7262FF4520CC3B9194EF5BEAD93EDD5CBBF775A894EEC324676DCF96 +24AEB7824D5B0A506A5838F4E8651795D1611577E86A55393644B2A13E5B075A +FDB70F8619D12A0554476531F69011ACBEE38895BB29439BFB469759E13B9595 +AD5712F767893E2DA66E73C9A88BF9C131C2E1494B2BD04697CD7655966A2D7F +4591E4FE21C817D5337856B6A17F4C2AB207CE750692DB20A25A13EDE487B3BC +0AB2A5C821DB76C4E9100B0D7C4AAF737495DF622216064C01698126F8F237B6 +6016C1FCA6322E7733F0CA0EB83459B143C970CC26EFB1FBA673DE3043FE2489 +2B06DF11D30E1984F7B57DE00892890F36C445E0004DD0492D0BFC40D8DFA970 +4C18FE162CDA7DD31D69714E55E455399C3DEDE5A9A23151ACE7F23D34E70F98 +0F1AF32C7984263F920CDAED21D94CF9DDD72E8EA7AAA7EDDE944F167E318A43 +FAEAC3F77026C771C81017AB544FC6F81009D861402817ACA88FA41C36798168 +29E7204C78F0A89166C1F27B1151988825CB4330693F33B30E0B006352966677 +7FB5E5D522018FA4C7AEB791E84315D67D114481E4427F0D219BDDE0E10AC009 +677247624ACA604F41D4074B24DE54B57E9FBCFD202A40EDB497690935AFDE21 +0FAC4108BCEB82440D51DD0A0D0D61E3F21204E61AC15BD51061DD72EC27A4F4 +7EB24BB58BD6B081C68645E555F9EE3F5B71615BC98F03CE9F059BDE71F3C3B8 +C0283919A815DEFC70CD1C8C450C6E9CF1001371EEB6651EAE42C1848C0F271D +0466DFB548B0DBAE1A0F79CC7F9CF5D113CAFA86A04048E0F6A0F6A0E0D42E29 +866D8AF62A565F302609905808DD338460BF75A75DDDDE4B38A569149B2EB856 +8AC05433CE5DF29CB9F653BAC71270C8BBFDDC4794FBBBD407134C1A2F4D22F3 +3D18EC493CAC8BC6EF887B78762B179B038D83C1C96A8F6D2C507AC5DF3E3003 +22E63A4F67DC02E2D59A44E5DFE529ACCE3A4CEE2567FBB6FD1CA178DBD1399D +2CE138F853D68514F186EAAD924D9952D551504D7C95449248C979181BA3DF5A +8925BCB229E63DA811716D82B56365629960DE392076FE533516CCE02E341137 +EC32EECBC9ECACF92B03BAA83859FBA0584EEA52B3904B69C1ACD8B56CD320B2 +3DEC1D1DA1B66741F1C32CB8F4DA6FC6C8C64C5C3D0A0BCED43C5CB88E5E2B84 +6C5E062278DF5F323E2BB59CBD5B1F41F43BB3C7AD92A69B048758C90E0D3A52 +6FB41FA9EB8BFC592793F45FDD2157DC92B4A910312DC2067C6C5179BC170DC2 +1E445045E7E5720410DB949BF761C9EA5830D2C474FAA17431B0B69D504C8F49 +52911906240AA7A6E649577251FBA1B694F34F6D382E8FDA76708690341646BB +E4C8FC130D1EB7214C56A203983C0AAE490726E24D6CC83F06E29E117DDED606 +5ECDBDED5D5DF2F48F642A19F9E59B3A0C39D11050DC4895956B4ED5F71CB7CD +806D50CD68C66C797BBC187FD3313474361A2EC0C30B98A7EAC314BE1049D354 +72F2C754771C49A3B8DE3BDD7D332D5FF160D2C128C7B4524B3C2191372AAA1A +0A6BA0D4B8D440B4CB17098A59622AA62423C4F7CDCB2DCD45F7553E61FBD272 +EB86A952B821C8A360C531B77C49CE62BD37550DC26DBC8F1060D6710AED5646 +FB43A9845023ECE6444B084AC06E83393370C505874C1260117CFAECC1AEB626 +B9076582EB7F4BF3F5938AA89A3903E8FC147D4E3B89B06D7B51672391BB7F98 +003B1AF7980E84302BB8ED67B4456B6F45BD1F2155ECD5B60C9D8633D2BBA367 +2F503192AD0C9F3A204AA41B8AE03DD9D8A8E7FEAAA29F0AE5F18892E64A050F +A44185D62296B9CADDBDAF78E769051D212D294B14265D37FD248C2F8370BACA +D33E7785D00C79714D6F4C11D512033798826B3B711B7BF306133C9F536E18B0 +AC2169060D5B42FE9D70FE52C3CF104F2E28B872AADCB33422A5106EEDC941DC +29FEE0EC5020582C0784556A74E3697EC5BBBFE08B7E878C06A13660F164C740 +2B6E26475AB9E4944EDBA4169A9D36B43D2D88948B53B1B9C8ACB8CE7880000B +4226719FB522758866ED95E18B0965FA0BB633FBB79D67F12DC20AF71FEF1A5C +7C895EA14CD857C5C79B5CD31B7A831905E7178E26657AA3026FB65E2FC0E201 +5489E6B9B60F361CE78514DA8A89FC3CC7C434EF6AA0E60C215DA385A8910697 +4C1B9562FC0016794C2A124E27FCA078404500FB9B3475B7A599F87CE00DD4D2 +745292C279F8907DD01EE660B88B41AC46524297065681BD24AA1979E00978D2 +7C33725AD1953F5BA713C8ABE20D350B00929A29FC28C5081D9745773108F37B +D7064CF53AC0788B5F3445808E1A7FFA9064D1614EEC7D193F137D8BC89D4E4D +7224D2C322B0C35A641ECF98048CF8A750C6CFB4E1EED164C354EF8DEFD02829 +0F91E7C1B1F3E98F9EF0C84FFE10197F116278A5EE0330DD552329B1177CC4F7 +C6A79F8D96C4392F22815A222BE811B4B81FF99E729F2D74BB86E59144C42092 +B2EC7CD29E91788DFFFEB6FC9E777B7638C3CFD777DCCDDF2EE14388482D89EA +9413310C2834290131D8154DA17FD72260D811DE1C82B9761BD0FE86C799A163 +99AE61D5A271B610410346F4B9894AD72E9E6F6C63678C1FD1706B118BA4C60E +69236F15FF65459E08D6942250D0A568DA1CCA3F85A0924C4CAEA475467D5D54 +B674EABB35604C4337382F8FB16194681FA11EC85677E57DCFCE6B7CF780FBE6 +1E8C9FACA71FAF605C03FA5880514AAA760C91C85F2B2190BEC2EAEA4E46EA02 +5172F34E607A0846126675E96859B1C657DCCDBB3A64CD8315BA8C88E833D217 +D352BF66F5FA87940EE2A1777C9E1E867D8D2DCB33B242C491763629311B1E84 +38EF9B80554E5F8DA022BE06F57838FB5327592B97853E6DA510BB5FD2142DF8 +E602A1635AA59CAEE7FAE408B381CC505ED188354A7D56707B3B5B7F2A83DE3D +9D3C34B160DE3BBB0602C0102F8BF5D17D739F2FAD17C5E403A0C6E9D3EBB864 +39A015CBE7ADADE67C60414A78DC6856AD0EA0998F51352485E48B1539F42531 +2E10B6E3FB27E60D445C9755DEF5BFF503573B06FE971C769B0026A866389FD6 +6FB25812D7C06D5799BC6A271F1F9B0FB41C0E3F466EB109C8D0DCE23D3D2B6B +3566329ECE6951E6C5AF424C7C7ED0C1F3B1BB7B212BF4A5FC7859465FFB90BB +57BA658CD542A24049F2E6897A812AADE9B1642AA573B6AB80277DEC2A869787 +070B4F72EF11D1DE9C79A34858997DB1A7789D7590FEEAC1E6150E01BACE5334 +7CFB81CCC5D42E3A395807AC19177AC8667B9C71AC0CA9D048989DE54E6BE675 +BAF3F13BC331E3AF75F6AB2B14E234CFC3EC303A22AA64A2A3B21DD02996460A +0BBB2431B58D0667D8EAA51D3E03C27C1CD779FB914D02BEE1E544EC44A0A4AD +936713AB7729B634FE216181F4D5508B680893A2F28EA451EF35701091195A25 +2D5C727A723D589EAB2DB1AA45B271FC9AE17C0B387C627510EE80DB03FE64AD +A453C9CAEBAB4BDF449FE9A0E00911C10ECDD8A9CE2FF49BB9FD2F92660B31C5 +9811ACC24162DBE7992660A880B5493D03F4B7B0FC512B22A33A1E3AB3BABC0F +4B3648E710959103A0D5F6E6E9A86BF3F4EAC6BEF1AFAD3038AA48D0A38B4C90 +B0B7005D8D3725C8563FD71DAD5F59E7F14C2E2327BADD45EE4854E4790F8D3E +8F2CF554208DA4789A198489AA1D0FA3B358FB2E8245D6A6E2B449B9F91F2241 +E79504B052E33581DC98F440ABB4B48AFDDFF1939DC3F52EB07DB9FA636F5F7C +6A0076210981C77D0126260CE1D224519469AD53E5ECB0FF473F960463A8C353 +18033ADC1CECF34BE3D751F59EF711AF0B00188ADC2D215C2BEFD52B63E0478B +553B3BAFF351AF373F3C94B2C279A9E0964FA918719657D270B4DF14CEDF43C0 +230F467F10B3B814C7472E7B0301298E67F518DCAE3DD02F34661896828145AD +9CDF4D547747DCC70E1A43ED757B6FBA6BD2D2229F2EE00D5D6DCDDE1A5765C9 +532A98A6BA32238AD2767BFDCFD271F009B778D152DFFC5F7B3E93FB30B479D0 +95CB3DA664F7037FE20B286C7C21BD14D1C11537097674E4774AE403915DCD42 +4BF85C7A06F5C721CD92EFEE90DC0ECDF37F8C4723CAC2ECE44271954B67C721 +89634E05E351C4B3F360356B2C02727A46F2A0721CDC42D5FBAD1968DA46B729 +E72BE77930740652E4E56CE02DF5A881B61968166F07E36088B5451EB870C14A +D9A07E34EF0D7C92156DCEA851F625F933E61F36DA3320F7A4535289FAEC6883 +42955C50434FDB86A1830D48FFC598774D502584D6CC867FC50238EC24D2B58A +6CF0AF823822CEFC74F874B84658F4CD54370AFBCAEEBBE60AA457AA5DA1A06C +C8F92A48460E94E7CC3E28791F2885E28544FA5ACB0F4125DE6F8D532DDF420B +7283A6591659F5B56E61504B5322B4B1CC80A0463DCD00B6821F56446E43F029 +E56E69F8C28B3112EDA3AA5E69046FBA5E57ECF686979BE5B243819BC34CA308 +FE1258B6A1127E701593AE44C88715CF4D3547DC6C66E85F8C14494AF4F07F9F +22723D40A8D483B725246DF4757706783AF56C1A953DD68BC97285C5315CCD5A +4350D8742CF7FA13D1A46042ABFA25CC6120EDA9948D262FBB66055C464C14A0 +B8977B5BB2DAD142F46CFEB4A36B7EC51D55E728883F50672F3E1D4FFE41E5CF +30571C3EE09101C213AECAF90EE8698B740FA5717FF2198C005568E9DB201600 +833437B707AF68F52E9B68EFC36D73E9D4582AB0F135EA890D939FB1BE866144 +67CC07007B66C9CE3F7B204E75369E22D09B4F88E6DF4F7918A79AF5819C7A77 +3DDA23B3F1242BC2A61545E112255DFD97B86E859EA508CC77577BD9404AC9C6 +7A998CC511760C3CBFCD9F6F53A7B1F7B5EB6ECCC074A05E533A67FCA3CA63B0 +552D00C4D31149B29173A8667D9713756D64911540A9D4F3D071C90A76E8B9B4 +B0066037E9359AB21FF5855ED9E71BD1E9848D6A663694BE34FCC171305B2826 +BE177DDDC9B1B97BBC79E45EFC7E70FB11AF79699F373E700CE4D171086461DE +D8E061B240997646FFBD6D273FA9604861DBBF3A50DA307E28AE218C3D0818C1 +4331CF7C0F448650AD20A77AB23CC5F40C48CCD602D0B32D4C7CD7B4B607E262 +D07B5214069C6856D31F40B0D50A63B079D065F79C3ACFA853C2C8A3DC2572D0 +B5DD285BB0ADD7596FDED62DF7C68EFF979DB5E0182FD061DF55362EDE0B03CB +70A15526CBE98186701557FFD27556E64DF68EB38234AA13770C733477CE8A39 +0B65A272D1DB66EBA12234F1AD36E0F2B0289820CEDCBDD4CC852F53207BED97 +CB93E853456D631D7DC397ED5A6ADF59E8D04756921A319E8A85DEE2FD175D86 +A5094BFFE6FF5BA43715E2E2941741E63570CF3489C7DDF94AE79A0021F76384 +6E76CA3C1AC552EE4B66DFD560EBDA38EF5E93DDA803BD06E2EE8003E2276790 +896D51B88E4FA90061EE472BECF58A133B35920E47BBA565727DFBEF612ED98E +895C8936833C52C5703B5F79F58F4C3171F2071040881EEABBD9D4313F246856 +AFCCF15AA4A087A9483BD95C260BF5B59485B74E1E3E98F92505B0D27F46F832 +CD562D0649886F2CAD709585334B034F3C4B93692C0082EACFFBFF259ADAA6D1 +9F863393DC0C772B2A9230FDB5FF02E8F0B5C059DBAC8D8F75BE0B3650AFA3E4 +4292F1CF0A4AF45D9BD8856FF82D93AD77ECD217024A8F619A5B8667D286FA94 +587224B5CF48327FBA64FDEB58FEE11560EA78252F6F3E3520319090EDF0B565 +EECA2CB5FEAD5B42A95B19D4CF41BAC211CEE425FE833DC7F67146FA46AEEAFA +2AC315DD3D7017B652AB372D6941E9AE38D8BF6F48F5032CC938C7F8AAC3ADA8 +ABAEDC939E982B4C92C666CB24A5242D5504A788338BC5663222F502094EBEC4 +007B13BB67213B30783987029BF3458DD1714F59421AAAD0C298519EA2A4F4E5 +38703C5CFFD13C621EB988C6EDEE218B5D5315164FBF0C41F32B5A48E50FF7F4 +B60B005B69ACA39396DA5969BFD468B28BEA77413E80A3F7027A31A81FCAC929 +108189FD78D3D3B6B22529ACDC418F7D8050A4DA3275FD84E7F2822325CD1E5B +B0CD6685FA050D53B892CDD028FBE94BA9E2F1C61BD56DEFD7789C2BAAF164B4 +F8FBBF983001B91D0A667F94EE096CC9695C0F84B3BA9BCA6B50787EF1DDC483 +C5DEC8B12C00B19F9D1C680BBC3751E3F9C964F3302B4B9CECB9F6DBA34BEAA3 +CA2F39CC530488640FC1A7CC894E4AED03A08176F3AC15C3FA26FE85C9D9BAFB +9F4CC02255074CCB951B7E878D7AB997737417BC010499D7F91610D5E2A67AC6 +F8D95510738B83B43DFF22C451A3096F758616FF223882017663DA7AB0AA0D87 +4CE2C31640489CB32EA91176D5C39531746330ADC7925AAEB086075BBFD5E9E2 +4D8967A73090B20310432A8D7FB3D0A756F6D73B36020F040E710792561FA99E +3307619D6B65F1AE55F0B053FA8DE24D54619AA5ED9F0C1A7157AD8B9D97A142 +386DB15AC36D6CCF453C2EFA6A4615935D388250A11B296307A45B90D7E76BDA +609198C8FA31C6E5CE1A1AEDD544CBE2D7C6FCEF1CA63BA2D57D2744578956FE +D463214CEE5C154966E10F0A64E25DF25BE8538F9CDF5D480BD8004082070F38 +C88473561C641E815A6D94820D0CDE56829F0AAE4BE1315D360DEB4CB25B4FBF +791999D4FA7206256B177D8450D50A32A7F806D89471EE96CC7E85356D2C1E35 +288B7FBC0036792A4E7DE77DEB347F2168B3BD9AFD31177AB5E4990957869944 +243087BC9F048C218368BD6C738832CEC99D7F31159A33026442ED4D27771E12 +BF02554203415B1877941037C72CB762B51471C79365C018D506AAD55464A248 +7EB6E55D9B0527CAC8A915BA84F4DAE556B427F48E3120142AED5705789C2708 +AE94395B1F7B875EFF7F19B9AB8AF28737FC304E32C8633625DAE96D1D732E29 +59879BACFBB15ABFE8A6EE1150AEB29713B428FFAFB619206D71FC382B1215EE +759318C5CFEA9C0E5E8E3B7F47DE607B6F93C19AF28467568A3F373AEDC78AC0 +CE99A407D97154FD68220CA66F7D3EA77B323A7015FA9D9E8AC5927D0E7F4A4F +1FC871BFA999EC749E09FE2AEB8220705B0AC8CB4DBBC409CEA6B47F98B67CED +DED64869A1F9B3BCA0A85D66B1C27301DE7542FDEEAB005F2FB76CA066664B94 +968C3E637E055EFB165093574FB6EA732B959FE708C52FFEF012CC1117C85EF6 +56B97BA4B30322F7B3F1F95233A3C897E5316BB86E8C331FF1A858429E0D98FC +DA67AA525C035606A8ABDBE35B742B53183CE047EA2CDE1C08EDF08E5355F694 +1C34925DB0D5314CC0B205F40775A500B76491789B90D4604D3545E2D7DAC1EA +400B2CF72EADCE9C7409900ADD1C6057DBBD97D332F6435C0B91B14D081EBE01 +EC9230E6D12B6455E401CB100C7B3590D23CE094C79BE8266F1F24937448FEA7 +C74CE914AE8DFE853F3E068433A6DA96F156A0014C457040587BAE7DB4CAE2C0 +EC1FF60747BAFB376D5F87DB5CE2A8512453088742214C38F5B6E0D7644A0C1A +F67087FA502BB43C27B32931D8315CB8A425341ABC3E7656588AB563E9CC456C +E46CC1E57DD4B2A83CEE5FD154001568DB6AFBCEBE8FAA4458AFA35BF37E4C71 +1D112063753E5B66C8B4E801A5E46F6053C8B55A95086615D6601924A6633C4A +C4D8EB0B7A5C8AA7E49FCFDC8182EEA53DB300AADBCA3836FC88A140A155C726 +54CA5DDD926DDD0C1555C26E30AAE25D1CA4A2478D0FDE0EC996A1399D5C0F69 +C349AAA9206B2554D7D6C68DA845053641E22B965314B6F28D69628FE8D5C243 +E978E6B81B3F916E722DBAF355B18812021267A9E3C324B3D9F6BCF7B5B50CC2 +D5B72D9DE9D485E103F25E1F42FF7BF040B3B6B5DFBB36BCD8E8B6379CA3198A +7AEC551899A044FEE3CAAD9A2C3D839DD370C97C194D5A4F2815785E413A0597 +C61887CC4842988FBB321DCF73FB977402DA1E3D9EFAA176230295ABFD079DD9 +9B2D187B82BD7FCAFF1EA271FF74ED0210D616BCBB443800C9FCA4F467A19717 +DD0D36AD7CD6CBA51AEB15755E68789368851FAE22F39F3CBA9CA1DEFC304E17 +33BF87828DE7758DADAF45CB27CB0A64DEB8F4CCE7FF05CEB0E4E016B9675CA4 +E7E001E16FB153610F077EDE525873CE46E0A3997EF7F73D8DF38B916A8AF808 +93C2463BF8B9C5875B76FD983F00311BE872F5CDB5B1647508F422FBF2A56986 +6358FA3C232E7E6063C82F74823036BB7AF8F8D545D12D82B2195DCEC5969DF2 +0EE8CE3123CB3010FBEF3FCCD7F1920ACC42FFB593697B786E6A6F52E10C1A15 +208783D4280FC31CC679F9E4A00E684B74EF11900CCBF5554CFCE34B65A9A999 +68AB22E0A438B4DC1CBFC32755F7DC8FE58A7956C1BBBD29983200DDDAA59C5B +4CE550F5E0AB048E98DA80BDEBA63ADD9DB6C7DC3A3F6E25C1FB6B638120925D +C897B2C05C4179A0E48740439BEA3FFCD35C71B21ADFD7C8412706D3868C4BDE +30F6B8CAE82D86AF842CFEDCAB3CF67BDF0AF7FCE6A0E7AD2D247446C38B2CF3 +26CD3D7E09F5CE2535283C43D04C9391C7A1CDFA6F2571F786A1F0189B9BAFCB +AB1CDDF8190D7CE364F8FF8EBCBBD5F646C095CF27A34B7235566BFE8B012E01 +CC721A7B3FFD795A0EBAF81A8A0A7820B99E98166C1AF177B87446927CC0C239 +54BBAE855E9FBD704DE67917FABE3034A953930949AFCF79A59AD8A387CA1FA4 +58131723EB2935C02EBBE6F9554BDDBEA5EA55E3FD6BCF25DA52765D65054BB8 +4A5C2AD1312892297E1C45570F0622D145BE35C8758391F28C04B3AC4282D1AE +084E080892C76C1B9C9F738760879908EC5B3A90DAB7A6538080A484E54B9FF0 +1C2885E93F1F16E52E0A3C9F6802E6345BBC5DBC5E7C57C85104427CA3182C7A +54E95B22D149BFBA403CC8A960EC62EDABA1881F31B92C54DD21C96298A7703E +E9D2DBA4B91A23C4E5F3D225A38C07818DA8C2F261D950FC8AB6042023248E37 +6BA0AE50B9A85F04EB48523143AE40695F127E34E070331620415B95A5ECB24F +C46696AC6F75020F6322DFD03B42788C535DB541FEA6F846380E8F5800B7E060 +51A387FC9AAF598C88CEF209FA38E008D8707A34245EFB722BB373D7E6B1E6CF +BDF2DBCE22FD2C85F78C4C4FC31F3C2F6B553C4295A1E26665BD166FFB7DF6BE +A6E9D18FB735F2DA53138A4A4352B36A08B662528FE0237FF37FFF218D88F2EC +50741BC5E98E856B17D8015869044657657BDB90D69A0FD5D5D0CF4A6A091E56 +938D444D0618D7B45C22F65E18B034282849355ACE83A188D164FA36367AE6C3 +35C775F72A89A4017A4071EAE1118B88C58CB1DE4E20EE1955BE0BFE8646CCF7 +05322E5566D14B5318A2328648CE7C1AC36B077D1A8AF17AC827E500B09FF496 +69CF7446403EF7B00C4F1832F1F6692B5FBACFA7FF9A719E5DDC8F25A798CEE9 +F4F114E522F00B7A415AFBCE48D09958DE98CAAF427FFDFD635A7ED5DCFD5F7B +6D7AF2B5E78F4446753C8CE59F923D4728ACE448F35BF3FBBC8B2ABCF49432D3 +AA49924191FC8AFDAD01863EE8716B6D76A6512B40BDE9C18C7D321646539DB5 +A09047ACE1815F462E82DC593548CF68B78D52049AED0E44627779613BC02BCD +2B5BDC8D2091271D44BA1362DE0E44E46CAA9D966D429848FA422A73061A12F2 +B1BE7A81533D810479F91C9656D3AB7F00B9332AB851743C0F25E32F37E943FA +370B4EB25781068D8DFAAEC50CF86028610CDB59CEEC4AB547EB3908897AF9ED +CA74EA35D2CA70A70BC83B0AC2E4A5E558098AE2B12EB42397CFCA0F9C9E15BC +9431FB2F10224F22F0E191291110FC5E1313A99EA12B3E3318263AAD516BCF66 +C71C825091984E21010B29025E3FBDC518E8960AABEAE236F03611CAB6F87D03 +EF0DA8DAC4D2C58A9ABD40E592B2756FB21E4D7D2F2D3259F51CEB6BCBB1B4E2 +33BC3B474D779565D69F0FF19113A20553F85DFDB4FF9E175606240A7562B12D +4B8B8F938AFDCFDAD721A64972573F6251D363FA971FDC41F2E02F7DF28C0AED +EAD3A9CBBED541FA7E6AD7BEA83945118B83564782FBCEC5B466B96DA7809BFD +A86907AA67FCC568533218DDB3D201301379A1B9EA8A32DE36B1F7F93F99F0BB +FA3F4D002793063ADB685A8935EA4A5E549767853A6488C6DFC2E70B3A455D0A +29E8F6FD949E810C0EC0F6F835DDD975EF68B4DA83F23A14945195248F667B32 +EF2F958253C7F5FD49AD7E545911E963D76006C57322D2CE2FF3F1DD1256152B +3226C0CA03B72F409C91151FF59EC80C2B7431C656E94E19904AB842D63BC797 +1C6552AB4B265ABC2AA8B66096AEC22E778232043288EE0F60D6ABB319B9D2BD +0FBF6F0BFFF5DEDC3A39AECD6821EDE1B213F7A2E6A7BA475389D647F663642D +E4C5C3F0DE1C0030EE381006CB01B5E5947AE6E837DD2ADBFC967557A0182EDD +16B10FE9BDD490CA0A3C351B025FC63A08D1415163EBD31ECEFC3F50586142BB +205E41E1ECEC46CD2209D760D75E743AD13AF1E761A8B7F996ABCAEA43645546 +F42C87F6909258CC74419B96A39D6DA3233834894CC60B03F867B6ADAA2C18F6 +0040A9D8E70BAB12221217095DFC57117CDEB536FDA09E11787D4F7B448F88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.0: CMMI10 003.002 +%%Title: CMMI10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup +/UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMMI10 def +/FontBBox {-32 -250 1048 750 }readonly def +/PaintType 0 def +/FontInfo 10 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI10.) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +/ascent 750 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 +45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 +7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 +72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E +BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 +974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 +11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 +1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C +7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B +0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 +EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 +404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 +78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF +A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE +88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 +C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC +BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 +98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 +E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 +143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 +981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 +88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 +4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 +FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F +347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F +FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB +C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 +B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 +F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA +29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 +36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 +048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 +80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C +9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B +75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E +4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC +74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B +D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 +E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 +EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D +543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 +710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 +EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F +7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 +03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 +01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 +500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F +F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 +AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE +1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 +85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C +4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 +6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F +55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 +085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 +BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 +2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D +CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E +BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E +D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 +991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 +6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 +E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 +E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 +B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 +4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 +1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB +B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 +8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA +FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 +AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E +BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 +E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD +38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 +7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 +2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 +DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D +22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 +8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB +44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 +D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A +42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF +C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E +0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE +66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 +E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 +6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E +1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 +B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B +897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E +EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 +A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 +F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA +A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 +2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 +51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 +598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F +87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE +178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 +4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 +7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 +AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 +3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 +337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 +C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 +DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA +7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD +6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC +98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 +821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 +C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 +7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 +B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 +A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 +23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF +C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 +969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 +3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B +9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 +1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 +B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 +95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 +FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE +44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 +FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 +E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA +633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D +6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F +FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD +375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 +6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 +EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C +E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D +F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 +DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 +D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 +D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 +9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B +9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 +B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 +D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF +8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 +FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 +B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F +00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 +909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 +5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF +7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA +BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 +C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 +BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 +BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D +4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 +94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 +F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 +E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA +92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 +63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A +CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 +B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 +5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E +86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 +AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 +3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC +35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD +155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 +AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 +E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F +226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 +9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B +8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B +919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE +A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 +9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 +523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 +88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D +2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF +AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 +B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 +CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 +3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 +404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 +262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 +084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 +E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.0: CMMI12 003.002 +%%Title: CMMI12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup +/UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMMI12 def +/FontBBox {-31 -250 1026 750 }readonly def +/PaintType 0 def +/FontInfo 10 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI12.) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +/ascent 750 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 +45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 +7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 +72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E +BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 +974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 +11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE +882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 +2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A +7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 +0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 +987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 +609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC +182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A +CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A +1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE +C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D +3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 +D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E +E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 +761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 +8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F +68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D +10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 +262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 +922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 +56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 +32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA +7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 +7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A +46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD +754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF +88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F +CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A +7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 +8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 +BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B +CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 +8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B +D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 +135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A +C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 +1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 +07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 +14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D +7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D +2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D +639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 +D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F +90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 +10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E +1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E +8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC +D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 +1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 +9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 +EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE +DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 +60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 +FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D +203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 +FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 +DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F +2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D +244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 +31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B +724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 +F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 +D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA +AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 +CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF +01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D +CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA +287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 +8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 +9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 +6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 +7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C +192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA +AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 +A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 +50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 +A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 +3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF +CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 +5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 +8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE +084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 +92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 +AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 +97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF +92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 +7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 +5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 +13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 +6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 +5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 +6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 +F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E +A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 +7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A +9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 +E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 +AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD +F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 +0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 +1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 +7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E +38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 +5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F +3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B +B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 +15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B +AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 +6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 +CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 +EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 +A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D +806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 +461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 +4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 +9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C +172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 +69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E +ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 +356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 +E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 +7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C +B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A +31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF +EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 +98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 +C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 +AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 +E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 +76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 +8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 +CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 +761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A +2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 +89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 +D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF +C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 +D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 +B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 +AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F +D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 +866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD +207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 +756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 +60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD +A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A +1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 +A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 +C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 +03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 +1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B +97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE +D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 +4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF +94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 +201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 +9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 +CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 +29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 +4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED +66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 +14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 +84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 +6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 +49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C +224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 +5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 +A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 +1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D +5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 +40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C +E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B +C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD +CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D +2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE +710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 +FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 +FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 +5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.0: CMSY10 003.002 +%%Title: CMSY10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup +/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSY10 def +/FontBBox {-29 -960 1116 775 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY10.) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 13 /circlecopyrt put +dup 15 /bullet put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 +7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 +DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 +511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 +1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD +028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 +1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 +3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 +91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 +E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A +11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 +C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 +D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 +B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 +93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F +10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D +7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF +B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B +491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB +F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 +019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 +915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 +356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 +5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D +9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 +3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 +FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 +720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 +D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 +BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 +7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 +DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 +AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 +A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E +0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 +AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 +CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 +0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD +5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B +5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F +E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB +54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 +E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F +A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 +4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 +4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 +038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 +B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 +5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC +B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 +A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD +2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D +CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 +455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE +FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 +16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C +16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F +483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 +67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 +3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 +1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 +93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA +051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B +8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 +8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 +6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 +06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 +84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 +D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 +DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB +0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD +8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC +C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 +754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 +1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 +CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 +1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F +153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 +905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 +617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 +8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A +98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 +53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B +888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D +052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A +CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 +A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F +07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 +B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 +10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 +CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D +3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 +D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F +849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 +648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE +84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA +2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD +2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 +9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 +B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B +D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 +135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE +EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 +C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 +7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 +4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 +9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 +050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 +3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 +C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 +843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 +CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B +B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 +3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 +19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 +FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 +17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 +8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B +CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 +F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 +1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E +4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 +2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 +9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 +E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB +8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB +BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 +04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 +C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 +ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C +4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 +84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 +C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 +09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 +D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 +56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF +035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB +FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 +CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 +B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A +F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD +CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B +0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C +B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 +33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 +4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D +F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E +2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A +CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 +88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 +17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 +55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A +A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 +2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 +406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 +AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B +60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 +C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 +5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 +822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E +94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 +D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA +343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE +894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 +DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 +DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F +8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 +A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA +DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 +E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 +DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC +4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 +5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 +02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 +88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B15A0 +657F5ED27D204449A841ED19E01432CFFE928E921321113780D036D34F2797DE +D4459CFD15BB117B5C9745EF3CD2B296D91FAD48C80B136D94476967E255F808 +AD2B5D522ADEC64176833756510391815A1D4A8DA1D0AEE7CAD36A1D161889F2 +3347D5B6BC503300FDDD48F594F391D5FB42C42113C538E707C16EE24A3F375E +7C506E8F49CE50FF9DEF3B4A4C1BEB3848EAA3477349833BA22D2A9012287D8B +A8C4CB4307A1188ACC0E6E9338E1559BE5FAFF381BD82A6C71C267409468B3C0 +2C1A29F4281D565836EAE57F680490FEA4A952FF64C8CD11C377C294DCD1EC25 +CEFB2B6DCE959D0208F85B6E32E9B44FD455F9B134A5306D95EA29F37BB8B86D +9E592159338E1293F449380E13C21AE42E6861DBBF4AE99A7469F871A3940835 +FFBE7F316FA9BB834EAB18625F0960352C75105A92F175850289B1AE177E0D52 +E43635C41B85F75CFB706BC92B0BF90367E180A141703EF69FD064C0FA34618A +5D9684895C3EF50F4AAF6E0F78D483280942D3F9C1A18FE7FA657928477AAC74 +ABCC21B622EBE2C0AD9EDEDAEDAA9A6E3D96E01CC837668FAC44FB52307CE618 +BE8399078154C80E7DB52F0CD16717DC59203497E89D69B390E9966C19D36188 +E47270673493F7DFC14C72B5B4737AD52783C573B5F12D50E9D54AD65C2C310C +72BAF2A8ADAD81ACF0C49DF971775F2DB7404FC9AD6B30C947A348B28B0C042F +CD9756359BA6942D643D8B7BC54E6047DFE25215CE5EE74CC3076975A3F324DF +E8D80F42AE4A1C00B155FE56A61CCC09924E4D7DA7EE07987C2EF9E91AED55CF +524C54E553030B5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT12 +%!PS-AdobeFont-1.0: CMTT12 003.002 +%%Title: CMTT12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup +/UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT12 def +/FontBBox {-1 -234 524 695 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT12.) readonly def +/FullName (CMTT12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 45 /hyphen put +dup 46 /period put +dup 49 /one put +dup 64 /at put +dup 97 /a put +dup 98 /b put +dup 101 /e put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 +5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 +8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 +EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C +02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D +46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A +4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 +7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 +A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 +4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C +A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 +75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 +9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 +098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 +ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 +DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B +5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 +F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 +2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 +E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 +C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 +42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D +4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 +95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 +830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 +FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF +F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 +13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 +6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE +896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 +91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 +660D995DA9294C16BED1113CBCC18AFCB5968175EE2FB374B1AA261F22CD75F6 +6E7295A254FEFC41A66EA6833A6A4EE0E75EF6B6FAF292DC5D2AFB61D5203DB5 +4BAEAABAF39E9F98B45F22F2E37F337A7BA412807A31B4A5A4E1627BAA964B77 +6AA397D368985045244ACE969799A9489CCA8FEFCF2EAF262ECE08BBD9573C79 +2785F1004C34F4D728E9E820B4133FD5F823B067F6686C82BCD35123E4831E38 +CDD5ADB098BC3F1B4162F45B11ED39CFB65DB1A10646D0B9FB5BBE475031B2AC +9E0769CB063B82D1232E24CAA86D9D5DBB9737B1E69608106D34CFEE3FFB4213 +5DBFB88BF9012F430D55CEFEDD5CC1D28B8EFE3C133F1A0E241CD2D0D58B0ADB +AB93AA7B1E312CCCD8E06297A5F698A55D9B7E19979C06675953B4E2B7FE860B +60B8A3DF7F12B1FE54E0D9BA9EFB53BA76FFBE54E140B94FF41FBD7937FBE7B4 +1793C8CF35C92915A6F47F6513B74F9F6C1F6C44D2D82B80C2262C7F86CC6C45 +426AD4602CBA422E55FCCC58DC17CF3C2F68E393BFA04605EA06279D2B96B458 +394495413B5C9864F865CCBCB290B4A064C74FE5367FF5A397AFFD3C1CA41B36 +B80204B315496B84452E91C2FA59A36836E01419147C5174EB4A58DA454F5097 +BA64EE9B8F88B56DD1DA088A8AB19259083F064F7394F15A135B36FBADB0EC07 +8B9040FD797CD026EC077DDEB665A7BF575C3FE620D5D4AE74BE2B0D7CD5D507 +6C0859246278D92425CCF174C2E80A6998FE14371FFA63D81ADB8373950CB08C +92CF8F65B73B97725BB875F3E66F0BF3669F875186970E2DD1A8B28D8CC1BBF0 +E3530AC0D2BE7719C48277382E624EF7D90BA5F927EB674E1D6FC4382C32C808 +2DA4901E93B1CFF340652C44396BC4C76BE4B6512D2B56FA1420636B3F714891 +8C7A5543A4B0101C8161C237A842482831ABD0593ECE98F42D80FE070E60B6B3 +4E93C4498239324AC4E3FA4406A035C7BE26B0086BED3AFCDD331F7D1B7D02FD +1AD03EFF049A2F90B85F30901014118EAB318DF795CDB289770D51C9261994FB +BC65DEB07C434D6E332373BD0DADD7A06781218DE5E32B7CB002DE4337251413 +48416F8489C37D39F61F639AC54F6E2D0A5B7949B29B3A8754FEE5E1A8A4019B +30ACBB895C90AD7D94D70F48CDB3AE3FE60488E867A6CE5521F6C123D389B6B3 +540FE72436B7BD5826B731CC6B5A5C397F3347F4979132C67C2695EBCD7FFFFE +98C943FA7AC98AB500866BD7906F62D1E9FCB6D3C28D10A9CE61CE4A023E79AF +EECAD72DD7B61802329D255563129DE5DE81F3E6D6D47E10893AC5929FCE2357 +EA2A84635A3FA92DD77C0A4B8C62CE26D5FAB880E7B974F7C843EA8BAFAFA4BE +5FD97AF9602CF1FABF41DF555DCD8C23DDF0ACFE58DC92D83F13775CFD453AB8 +AB3C4A9180ED6851246C4E58B5187F82CB98FB92FE17720679207130C8EBE243 +66F44050BFB10DB7A7B151EA5F90C2A5889599BAB1A6D1AE4C023FCB0BF495CD +F2C3CD3FBBFF8DF3AD63F5716194F5E382FBF2BA32567D10CB75433DA871E13D +94BB94F4E6F58658C04C764DF512229AACFD4985EA952AD56E0D592A9D408C64 +BD22046AE570216940CA422DB6BBB375A653A5B1D3BD5C0A6A4EB9438F33F9E7 +9B7AE1EC2D56DDA6E84127A4A47E9466A5CF70AE376E9B92B1F0528FAAA73AFA +268085C35C818ADBE05B241FBEE328A83EC622F1FC694D3EFD539C76A4807E07 +A4D2F49437B9DC18E21D621CFD31432659FFBA4DC702B91D4205030D89449381 +B7964BD73E96C4CCADC84680216482CC4578781B57028C023D63849F705E54C7 +2D652A48565B5B6AFAEC1174B331EC00EB7C528AE30297EAD23237E0DA25D83D +2254B13EE297478C5C9D7013AAD70416035EB9D9D7116609CAF1C5523CA28512 +D721627DF21F83487989F6CA9457D25181A0BFC6F072BCBB202135EE8612B14B +BF88CBAED2700C4D067B5AAFB33AE61E106091EFE34B61C58F938BA3705F91E6 +500258C054591BE8DAA18D55BB68FB131AFD7E55E7E1FF9234C08768E95D258A +700B8890BB4DF7B805684DE78230F0AF49C0A2222948D4F6E087B6CF1DF0FF47 +0ED967F5C3F417E0AFD4AF3547BCF8624302DF187512A35E569626ABE3FFDF7D +938B0D47BE9301EE955F6344F3D597CD33CCAAE12ECE2A1EA661EAAAC990823A +A34B5E982469151CF1737FC478879B75A4F1A4C4D94DB447EA53AE052B981ADA +3772B6536ADCA2AC1FEE3FAF27112714BEC13C6FA033BCEB5F8CAEAEBAD0B8E7 +2F4513F724BD2C5A1A22ADA7C90361C06B0CF1C92243DCF099BF786CE67F0C6C +7179B2E1572F7359A7AE6327C50AE1B55B2F5B035ED799A0C1283408CBCE62B4 +4151E03692E10D5E889BA8D0CA0489E8EFFF65BEE997D47FDDA5858F064BA96E +4709EEFCF60FCCE763A5E97D264200A4BF05AF02E0A932233FF14A1DB2EEAAA2 +D5C92243B284E40938265745D66F9776360E8BD59C1F5C18622B52FC9F499D03 +5C98EE8FEB34A5DBEC3F796C0B0C30B2B97EA5A2F7305005497F0424FE3EA4E0 +D53B54A745A91337BB054A350E481838E2018D8D129A07757FF8868E47A565AC +F1A13CCC73804B3F15B0E4B85AC88CA29441AA98237C6C38CB011D3DF2FCEA1E +B1E66D0F99073BCCC56E7CC897A9EC0F18D7766CA957298E54B1D1300E2E084F +E7016C6F59098D1520DD64EBB7CDDC67B3584F56E65E3217C4345E0CAE956E37 +95ABEDAEF1176AF7BFF82419D5677FD3AF166A93C39378ABC473794F7EE0328B +766E975B33D433D0CF4BF557FCF7947F0383DEEE280FE89CEF22CD97B81D3885 +43F0D2622025E2A75D9267EDF1CBB550099040BC567BA08CF196884658C1911F +E770576F4593A178DFFED391C24CF8E2D7075F34AD7A523F3395699C638BA120 +7B283483A0FDF760050D652A81A13570822B40CDD16BEED9A91966E2C5C28AB0 +7763CEA5E2D431C847D39CE52DC7E260CD7519AFF39BAEDA081AFC8DBED06E98 +29D9BBF552758E86DECB8C194EB6ADD7DDAFE5D58C57BA5F503585E7C24127B1 +105A6C97068483D77D25955EE3E0993E0F9DAE5298A2431EBAD28AE8E45C09FB +D89A396F83802C07E7F9BDBCED7D8360E704FA59B179F19908A36064230B503B +3B0B7FCC2ED0455E15533771DE613F2BEC8EC308A24EFA5EE37A0169B4721BF4 +881C0632FDF2D24D32F031686CABF7B04BF0BEDA2729C249426200E6948BBFAF +EB5A1F7654894571260D014E8AD2A84ABABA5806B0811EFFC3143946442BCC20 +19F428A66193BBBAE1F42D665630DBF98ED5FD7BB7E5E9315B4AFC92C6539884 +6873112145638C8B49AB9B69C1C375D0990976CBFF33EDC5A12282DD6DF068F9 +9C911EB366090F4A8E18A742E47044C9F3CE6B3B0868E05547B291B11DB75615 +3AD37193123C6B0EDE151AF8F4367A33B3E0A61027D8017006BD21FED4829C25 +50A7582D055B4391ABC43BB00F1398C0CC2CC02732C2593550EB0DF5DCA08263 +24D34186707037E229C0645D0088CDBFD06A1C852F1612F027DF7B6C4F2E4644 +4E69CFA4FF355F7A2B4147D0063EEB414E5449CD88C0A928FF5C58F5EF48DFF0 +D804D1BA5A4AF4E6415A75BD211BF564787B8BF9976EEA6872CDD75D313EF1BB +8C70B32CD81205F8ABF4EAB77729B34B20A9216B9F0083A2DBEED75D1D6D8536 +D86BA6F0F8FA76AE2A6DF3BBF815666E9975A5141A0B23499A40FC94519F30AA +A7E1A8B5FFBF2DF9F1E14F5ADC13F3F0617BABDDE5153CCB18CA9EA53EA4408F +AE16444F3F916B1AC1F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.0: CMR10 003.002 +%%Title: CMR10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup +/UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR10 def +/FontBBox {-40 -250 1009 750 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 33 /exclam put +dup 34 /quotedblright put +dup 36 /dollar put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 61 /equal put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 124 /emdash put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 +569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 +24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A +2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 +8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E +3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 +D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 +D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B +03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 +767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A +8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B +DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E +94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 +22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 +72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C +8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 +344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A +64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B +07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC +1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 +78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 +CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 +7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 +BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 +4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A +5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D +EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE +EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 +4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE +0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 +C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 +314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E +DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 +EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 +DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E +DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 +7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 +1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 +69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE +EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 +7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 +CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D +38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 +22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C +0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 +BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D +4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F +3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD +B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE +15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 +849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 +FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 +4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 +1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 +84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF +7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 +CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA +4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B +3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 +F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D +F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 +DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 +D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 +56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 +8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 +59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED +49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 +87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B +8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 +C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 +D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 +D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 +F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 +0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B +5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 +229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC +17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 +01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 +F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 +3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 +689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 +4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F +A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 +DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D +364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F +7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F +26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 +43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD +8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 +C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 +94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 +C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 +B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 +4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 +7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 +204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE +B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 +7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 +279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB +E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 +CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A +65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 +BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 +6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 +B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 +63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 +4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A +A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 +67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C +DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A +5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 +C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C +9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D +B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 +963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 +D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB +B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B +72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE +B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 +8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB +3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 +668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 +ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 +69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 +C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 +3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 +407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 +11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF +2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 +4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 +2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF +9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 +CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 +DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 +0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 +5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 +9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A +EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 +09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A +2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 +AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 +324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 +486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A +EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 +52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 +9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 +4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D +B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 +BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 +6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 +B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 +16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED +E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 +546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED +6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 +559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B +C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A +ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 +04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B +7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A +8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B +A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 +94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB +C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC +41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 +7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 +18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 +9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD +E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 +5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F +4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F +E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF +9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 +89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 +7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 +AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 +3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E +61A06A43575568DC3CF3844BABF04CA767E299575EF2ECAAC7649193843D694E +6CA59318C01132C361A3E43BE637B70B9966664E12EF4707F6B100BC37778D1C +F1806B1DE081D2C9B995BF1EE3842EFFBB8416161FE31633A6EDA118E563BDC1 +C42F403BE8A009FC756406669E34C6A08668808E0C31A589D0720BE32F3181F9 +8039645643E15D25917F38DFFD8BD08A420854DE15AF291ED675A634C151193D +29AA6E04E84A598350AF17E71973854842AFEC3EB1B58E4D4433309BF5ED9D86 +32C4BD136C89169D45718A88BABE25072D8E552AA4CA3F840ECB11519B06EB44 +13026DD6800BFE15E90592641FE99BCD18039598DC7B08AA89EE6792B576B29F +787176E0CE92270D872A5988E8CB83661FE8E8FD331668DDF9A87EA0FCB904E9 +FC2B5F090705C9CC49A85453967C697A72F27326FCF642B945A85944A34E460C +7E173819BABE5F350CD7E792B9CAE496423F13BBD49CB9F4E39D27A26395B983 +259BA11CECF2AB41FDD22698FC491906217FFC0F76FEB03DEA39BC8396874506 +EFC8A06F0F7EA849168C00D81728C739ADEC153F5A13A46FD1263D937A9EA004 +743883705AD534722FF109146B9E567225A16C4CD76EB07661DA821464D89187 +6369A5381C669E1741F7E40D5DE218554B7A51DDC4563E0F5AE07CF0A0966ECF +940E042C3B4DB2FCD8FCE4282EB39B5A164C35432A49165860AD65A0F555FAE6 +8D75B6400BC802A021411BFC4ABA5671F5BDB495EFF99DE8AEF14E78E8B6EDCD +C8C1E80B548817F55A6013554AD7715A7340F0C1768E26D564F397DAEE458E60 +E6850880E9E01C8D7B9A44418303A6563D84C33161045BAD96270F0C23D49233 +A469A1480B694F268C275A7750E3157C34BA420C338B9DB2E608AA18D0305BBF +875D7087C2DDF908883EAD6F518231408ED09DDCAB966E1673371DCB4DC4B04B +86215140470BED1FF40FC55A94AAFFBAFD9547DFB6E7441F6F18DD0CDAAAD67F +1C3DDF4A1A7E192BFECA9058986AEAC3F88D3DB996AE492FC54574037CDE8865 +4BF8FB8E7C60A284B0CDDC7A2ED1CC6EF05E054163BA55331C8F47F596B4EA6A +D29F48FA8167AB4AC152B091AD4296CEC91A73ED481864AFD7C9D8F85A00E6C4 +72E1589F2D647A483A51BA47CD9ACD8DD2CA4B3708C3EBA20AC324DEB563E615 +5A18BC810529D06C3726B892A054C65D1233FE771549F1E7A55BF993492C3652 +41F32BA17242A4167169EC84AB54891ABBAB7980B1B1CAD2C43493C10ABF5345 +53E8752D615673E5ABF7D3CF2687DEB3FAAD963C890C5781E272CFA67F94EC19 +C3EC4C5C017F5A2AC23DD671EAE66A013051689E887C20BBB90B79A821F5227F +9C8A17CB202849141A1F213F2D5912955DFA0D8FF1D8395DEFFF1E716739F246 +66C276AAF9EF371377AC7B45386A18D452DCED16EC5AF86017252D059DFCA837 +D14D41823F03E91830D6C17BEB76A16623AAC58A9FEAAA07D3BFCE05B6DCBFE1 +152EF48D4F01F9F4C2221E457DB19D77CD878AD8FED8BFDB27007903D49A177A +E1C1F837B105D9B64BDFD5A084820A161D75FFAC8F8EA78CC6D148F1442F1384 +7661502B92469D4BC8FF30DF9234D29F453310878E2AA72F293DB0618E0A1BE7 +54949F6488FB99AF0D7FA4DA1316C3C5279767142D132F62ECD52FBBC0D754AD +58FBF92629DC8866A0698E72EBE2F2C0A09F68895770EC42B469B08C7092733A +20452669523E73E7D5423DBE0776FA931871C65158C01E28758239390507C37F +337101AC139F611354123A5FBB4A0CDD161BE84AD71BE2DEA92FD943B1D0E2BB +C195472D10E123CEF708FFC2D5D16596990C20A062A2A358EE110B7EEBEBF697 +7DFA3351785BCCD59B4B3B349146BE9655842F51E82A44F0C6CA75B1CA5DD9F3 +D3BA6F0E89A63DFEBB88C96BCC680D3C03CA447409D52B19EEAEDDC49285AE8B +7087326C4F6517C3C9B02C10D1EADC6DB9D4943E0080A6024A24C791748AA798 +478EDCA0FC6B150DE7F8D50030A5A0F7EBBED6B1E29CDD745FCED01ACABDF295 +91D77AB0DD370D77E5EEA4A9472D14C6ABE29431E85C642F239150FCB0FD6DE2 +E74E8B47BE08F21DE99A181F16CE0CE0F1D72C4E96EDB597095038AED8CCB91F +B008F4EFC07E0361F8EA96BF0A4F3E8973249AFE0478D26BB1B5C5B3F8307508 +702DAEA6C2A88BFA33BE2046E61FFEAAD917E7F290E61760D5282C6BF357908E +644DF3F0BC7458C4F183F981AFB53440609E21DCDF05445629F196BF168366E3 +6623A868D4872655A2BD4FB87D3C932A44B9E07EA5CCEC059F7CB48D0051F3EC +1ADDCE1B474EE33580A5EE6ABE33479FC9E0916D418090EDB58EA45CEC2AFB75 +6B69E6D768EC8C82886A801A9DEF5ECD07AFB3C480144A602FAE78B968D26324 +734EBFBFA159B07ED5C94355E2B3BBEFC0C5E465F9FE403CAAC6A1C29F0D5895 +D51ECA2720C697D103B20F96993BB98AF649914F29527629DCEA100374B6120C +DD89264B95468EF1801F71550220B035B6A8E7B9F01BD6CBB30775DC75B1594F +8217B9A85D5E041C605C3C78D25CCDA88656F64C44A839C9C15EB8D5B00DB7BA +78FB0FD1D38E0521BF734C146A7D10D12B5079AF87467FFE9FD9445DAD66A569 +F3530B95CDACC4AEC5ADB5A77EEA86ED95F3811AD2A502FF553ED90BCC8A2C4B +968A7AE8D42F9B5350F7E81D09228398FCDA1106977FAA9A4370CBCC6A3B6066 +DAABE9C89AFC879E17DA9D60E86735975AB42349B4E37AF180E6FA628D056602 +E7EADDBF20707AEA86ED95F3811AD2DDF1A71C902662E2236641EB26C6DCEE68 +DE612EC635B3413ABDC2777C4930031F36ABE7BD07A54E5B551B90E4C1C49E74 +66413712A7FBBCA79D2FDABE1C7FEAA054C40C469B09385B88D9E163AD864BD8 +C7A95BC217EBBF0B9BDC9A30E8C8FDBC987307740E0186759F296F25FE60AE5F +5F4F3DE80062B8D95BB3851BC1CF1BFB30FF521940D4119108FDD2D1038ADC68 +C70D7175476917012FBF01163B4F13119754DAEB4C88C67D4FE859D927E0E6CE +A0332DB9F6F17A639ACB871032ED406DE854C900FC91F942CE5D0AAB28D29B2D +45B4975BEFD7CDAD2FCEE66DD889E47371A677AC6F4922CC21BD95A0707D2617 +08E5E6CCD078D7F9F3F61D889666F8AC7AC87A367EF9FFD4BDA2E48C7E5A10B6 +E3F942D03B8DBF4AF73074469DCACB20E24A6DFD76A069C9775A00E4A1A6D411 +1306326604E56F26766ABB680F60D676592306D8BC3083B06765C7D1D84B0F34 +9C57342972549BA8BADE4B571230AE6DA656922D74D5E2B23186163ACA97C7DB +C2269B8FE1AB9ED38E709D15DC351B7CFF110480B09786384B0E19F7F0C20B11 +FDB0F4A7D9552A5ED697D69314BF898C1C28CE865AB509C6B4C0EA755BD1980C +36D3455F588556CBC4B24764D050C69D000FC26EB800D16745C5E877A24E0D9A +F8B58AEC57969F5233E2AB4CF85048789BE20ED902017BCFA6A9CCCC6BBA1D3D +DD417FDEBD304FE32E2C6FC4F32392E8936325CF2A102DC6987CF2D8090BA7D3 +F1B16D8417B607F842FEC77F0570DD4AA98D8BEDBD3A5F962FA8BAF58DF43A39 +DF4F494458A2969EABF685A634431D9F3C63D5BE1A5C36ABEE60E3E1188B69F0 +C8D4B8A9C469B32C9ED1980C4CB5C34A4743415E2C941F291BE9931CCEA75CD3 +ECE1A04EBF44CCC1CA894957FD2498D84BAC4D6490ADB8D70DCE7A8462EA4D0A +2EBC632FFD96A6EB49A8E75EDFC1818C66A3A3E9415BE35C9DFC6B499F9FA286 +33C57BF883777AD1303366AEDB794CF2656A1729DF422189455C5FF2D23C1A5B +17EB0604F9AC1C484FB10FD194704BB2C426C55671372515A8F5FDE717BDD52F +97832A24AE9413B8C7B18D4B6DA7E01B21C53A8A1661CDA7C26290C67E3994C7 +7E833C1720D5FD1EC1C284015CDE18CEAB3867E917C98CE6C0779DAAA1422A57 +E98AD4D7CED96488C463B3A2FF79DB14D5999DF00E240548B918AA5E62E5A350 +B0EE6B87CFD1AA40DE86470F131CD145379EC562BEDCD4DB77132F8E6CCD47A6 +E71EFB7075790A3AEE5CCA6955EF3E43AC17191F202257AA0DA9383D8667CEAF +CC575961B1906BD44A9A652307B7EF8BFDBB7FBCF13C3B599FDBBB774F7272C8 +492ECF2B562A200D633B0FC7ABE5BF2E6C34ACDC5E5B0E351AAD9155CC3AC213 +4D7E7FBE2A98DC8F23BC236AD4161E5A44503A563F06AE338B9637B600F8514C +34C5E0AC65D85B53B18C99512BDA1619B1E0A54FC1CAC0F095C29B50B083E4D0 +458BB51FB51548B8A94A0290E121BEFE8C3E1720BA52FE118C79F8DA266F89F3 +2B9AA41CEF288BBE9905F191DF058B1700A5D79FD0452BA27898573929069189 +D5851D2D72794E883821B9A157CF685641A99FC0D7CB15E2DFD2F6459FF88757 +0B3DA85186B878777DED4FFDCC47019E52461C67B3240705C19A10B538CC9FE1 +7E24F3D2AECF62EE446194C687E5912D550BC96BC0610A93CC0E261DB8ABD77E +D0E8AF55678E261DD2E57767F045BCF8BC54BCA3800F83AA1B7CB194FBE4B27A +F60F60498E7D31F50947C86CCDD07710EBD56908E048ACDDAB2E08316401D8B1 +81EE22BC79035632E6F3D5BEEB8A2D8B7CE61B83270BE6D3A996D0F7028AC1B2 +6AA9510AFB2C804AA4A34ADD935932FF2D48C9E29D4BA44201CF03A765A772C1 +3941242BF84DF465C1E569145E6051FDE8EC2BEC97F0ECAB1B4DB17DA98F3388 +22A119DA37BC20C5A23E03EBEAA6B0F3D06F91A39ACA120792704A8363BF66AC +6EBA491BAE27702071FC1636B5CEDEF9431A5D7952CC1B50E39E6D615219A7E1 +0CBCAA8F832C827516C1A6B4935F4301AC7AAE77183C14FA5B76B08C3D154265 +A22CD8602239E2B32CE919AF44BC79005815B1D2C65378405645FCD9C5E125CF +B3E3DA1B660E5D1129031466E74A50D27E8F9A47ABF9F7DF911B50DFB497BAA3 +74638EFDB6E4C10FE3C5E7010CBF7A45582DFC0EB253B2F036A68A737A1A560E +8ED6B2D834045D61A03BDC63D641835DF3132F2D25A368590AD47310066954E1 +21701C915003C885E577E9097CE4186BE217A2F3D7A38325D20C60358C55E4CC +8EEC502D0C44A9B6828B7F1780DEF8060D7DAF7474926A63A6F73A85D5595125 +B964E95FAE6315C4BB0926CED5F7930F3C8C5F5E19FF44103E7A8324E14A75A5 +1E8883D1E8ACFB0580F0FA5C3C72F4B1F4CCB137705DA7E04938A5C9499709F7 +C85F07715651765921F017176B028A832560766631E307AF7F2BC5BC6FE2F8F8 +5BBB01D9FD44CD3B745454F6D3C8A57BF24C94BFAF5D43E0DB17CCC998E696CD +96E60FD8EAFC2AD77513900E07D00C705EC6388EAF26373E931425A333F06B6F +CDB93259DAF1D24D6EB0C53FD42447B49C723FEE17CC806342545AEE71E16A2E +C47905B31E052F4A95FE1375C77D62EFBEC3F2B57AD54524BFA4D11AAB4F8853 +323C8816DC662BD77E861AD3CAA8A3B0EBC1E43A5C1A88B0D510C486B03F9A18 +500A65894BED74898ED02FF14D29F561FF22B2095A63FBF9F73DC9DA46C03682 +DDE3C7F3E3D03C092F4AED3001E326570EC7A588A546DACF76CB14EBE8C7960D +0F13DF6E8C3B6C991D4E7E15881D4F8BCE999E31F55FF6088E7937A4E70B166F +7EEF5728CB89313B463A6295389531F30F1FF3033636F365D0464DE72CFD498D +EEB8CBD021C52D73CD659821A69D164B0CE8B2BAF5C35CDB1E964033836D2E38 +0B7577DEC6EAB35B8F4CE239D2259164F21B92AA53591B2387FFD46F21B18BCA +1817A627188C59EBA49A4BDA43B6C11F480EA54E583D0C5AD125BAA7D6C45C30 +5D4E5E9F003A2BA9F69523A88ADA4AD77F0F17B6231F6CDD3B65CE78E1E6E101 +B7C02295F60B5B33BF0867995A8037A9305D2F00D8C0693C7BEA51C82E5BAF05 +FC43B2C67ECCF0C96993E112F294CEB38383D63FF4CE2879A361D332630357E3 +07B111B8B91EB30CC14D31520EB574CBE1F1C5AE370CE1C7012417E9D0E081F8 +BF21E2B5B9DFCB452C98056DF1A31AD385163AFAB9A874DC6E344E7BBAA04202 +AB129DD4F8F78C10C346EC6878535A7566ED562387E9DCD3F920550A78CD3E2B +43FD9E5EFED97A541D8916E5AC7634327D48B9FC52332E827D593943063FBE28 +10635C18C7666E5BF3B33D78D9A633D6F3C4B442E0144E020F668E91DA73132C +6A1641AB98C5CB25CFF36F9D07C294627F1BFE1D0F328DFACF2A412DA1484B87 +63BA9326DD9494095045E652F0B91CF654A62521266536A14387E3164EADE1EF +55331B0C06D2C95524D388DA05E583D22606A8ECD8484B2AD0E4D6EF64A30456 +48CC571B65EBF0EA6033858BE43059075FBFB1592CFED2248DFB1ABB920132CD +36E6791B2015823FDC64FF7CE796E7A26B9A5AB859E42B12F69A905B2CB2F9D1 +223DFEA464E8CCF03881C5181819A48F9424774E04E429C30241066661038CF2 +C93BEF67F9F0B197A6C27B7179650BBF709591382A44E9382079C8B59291E0F1 +5FB82804985D453D2FDAB0E1AE990CBBCAF196AE7C63E2338D907EE63CC6CAC1 +703882EA95A137AC6F633255BA19E2A651B901DC8A44C77024C089E77AE8ABA7 +5309E0E8458F67AA264140D21EDF0DE67F24D7F5BA3A908D8923413B476303C7 +C3B8D68D41119827CF436FAE3348AD96414C1A6AF5308E8BC344818284DFD28C +6F227A98273FA15B054786FFC37ACEFF660C0B7B92BD2B482CDFDEE82A4EBC8A +04DC835F6720A4AA064A5E12D8D23E33690159E9B9672520358862685CB5800D +D6E24EE5B06DEA0D4CEB482F384904D21563A1DD0BD62FB9ED5EDBA8738E90A3 +782F94AAD44200652873239F07009E86AC3E80D7496684040B32289ECD009117 +91A81A6C0F84ECAEF8A4E6845F715917CF19E0596F72F71710D649CFE12BDCD5 +A936E48B8FDF57F8289EA61ECCC07DED2405EE4902940AA292014429A736095A +2063A0EFB9C51A05E8656F65ECA56588DEFD523FD855EC13B28C716B66015813 +AE3795854769ABC2DA719924E1AC8B295AEC0A6FA683BBCEF338566E8E3561E8 +3EF63E5B3518751291EF27BBFC695480622539F82495BA74058A6AA62F5E0FCE +460DA156D2C5B2F97D0F43661F1E47686BF8CFD2FB19C3CED38BF2D29F015D3B +511721A4D30642208E92B9E13A0D1F8ED44A701773D14DF0CB0E032FA0793789 +8731FAE6F07F80B68B9952C5067E3051B6B92CFCE6FDA116D04C6D42DB304834 +4589C43B695AA80AD63ADE37E0022AFE98D3A8754AC543C883825F71B3C1940E +DD56E6592AD60AA728F2937E23CF9280E9BD21300387AD687142E954EF567C1B +B22038D1B311A3C09E4DDBCE9F51F4ECF83E01D51F782E10B620750E2C4422CB +80970C04DE72DDF2D79C24F77A3B5D8D1FD1A4A60CF964C507E70F36C94FC49C +40281C092F51E15D134C025F48CB242466FA6BC67A043A2B51375E49B5E23A65 +056D27230A209105505FF1EC4385F03B972C5EF54B1D68D1F880832D1617889B +E3992494886663211A2AAE74E5F222786B294E7F407CF56B0E5BC8EC7CBE8530 +BBDE27B9096F2B26C4E34CD2F1ECF212CE844CD0837CA857B05B698E39B6F28F +C6726DFCC4AB93563E13B27689153341BC606532640DF6578271B0C79C78D6D6 +DCA8F81F3E1A5E51A2C079F6360AFECE8D78F5FBA770D0B5DB9950E38715B682 +E12307AF08FEA673C350A720C998374D858364EDD89338CE98B6F6EDA54E9DBA +8282237CDC03F3FACDEFFEB144E4515B262C7AD44086A38797B4A8AF0EC1EE2A +F76E9D37B8F95E9D2E9470EBDD681F1680705BFFBC47E7BF436E2EE112E6C32C +F1A79ADF8A04C6CDE3AF914051262F8476A3C98C9413388E7C2CA43C2815AF6B +4118CF875EFCE5198FF3992A6E2132D04C2877B78CB2462CD9AEDC8B1FAB3BA4 +AE9B88218ADFD18C20A27D45535672225C8314D9374F71A37FE89BC2B1653F2C +9BA81FB8302E456D3D70D746DCB50C8AD964B73257D3D029BD257426A3AE0F91 +247CAFCDA9A58D3DCD8008603A5DE0521B302E4D4D09B1223571FE8B1A4F5E28 +D86427BC862A62B609784D1DE7AD977738F5B057BD986ADA869E15D9D584FC9E +78EEE2F63AEE8DE0F6F70C60A6FA5909EE36207D17CFD7A525BE444125388FA3 +B4EC467D63E6AEFA796DC56C8FD8D2DC570C851B70411891A1CF2B2563E39BC7 +5668922B661DEF5A805B9516C1D8C4548186E9FA937A00931295B2A5241E23D9 +D14CAED32A28F016276A996737B9043B69D135C4EC5315F8B18FF168EC1657D6 +9EE29F8B214C32241B47ED1D21BCD2C55C7D7ECA13A297BF58F56E78A3C5F718 +9F937888483402D1B69DB5B159837260F1E58F895080EC30FE323D1791C2F1C2 +E25C919074D6485F10B9B608C3A0FBECE628D2A07BF81710119FDDB6C70937C2 +DCB42D82297C762C2CE8B16C2274728D5F1795DA49076F55A03AAA3B39E3EE63 +5F26F787F605C610D0FFFD8EF07F08249E4367D4FC5A72A6729190F6C5392689 +D894518367ED02B283EAF68ABDA35BF03637A9EEA0991B170BA4E94A483D9702 +6FC921DAE58B59164C3863C59ABC971E8C7E95FDC7242CC2871265B0C214DBAB +44920C2BE36820C375C0583DF09CF4341DC7A047A277FA8742AE36D942E9C95E +74BD1AC87BFBFD6EAAEF6509528FF9512910A89AE00CF891D61DF8950736E909 +7B4F40717A7A7C3C84CAE4F2D2C25D7390F8DD1B61964B92D763B431EC43E4BB +55C6BABBA783DDC400452573195C3D0AB0F49D50A77C5BC17890E2FD63064917 +DF2DD12AF76D8403427306446DE37D8853D4462EA2B0A67FDBB974A78AC6B7D3 +702047C1BD247C2C443E7D0944EA05741910083A06529F27BD6CD02C25FDA535 +2C16D351AB0ECF6DCD090D80AFEA59FCCBA9014D4BB4093C8A8DBF6CD8473492 +64559A000D55C7C55376D66603F3112DA770A2995DC39BA4EB348FFC96DC7A74 +595F2F7320DC650A7EB4349F2D4119B5E6F176B2D82E96C27251BD3D0E20498A +6CCC26E21BDCEC8F4FDF45E36257749C97E5D730A4D4698277A7B39460314E86 +4091F86394DC6ABD399B8750B55455FC68643C937C94A3D4DC63EF4DFC1772C7 +2993FE3C7A807EFBAE415258ABC674D537C21F84335AD02A9E4FFA99F55B8CE6 +5F1E19C90A187F99828BD85229C64451228057BF6FD848C897FD56A5903063EE +935DFEB4E4FA8EE80D2618388C7EF5EF12B6F10AF274371F45CF0A1EEF3FD649 +D25871125A7F3D125C54DD247075B508667EEEF405CD7FE5505B40D42251B0BC +FA700B95013DD0D2955CDD13EE6C8940E5BEA7DF36C3CA6E905E27788C6C2E35 +416961A3EF9A831D7876C4930CEED5B0F2EB65869969F2658AB50449E627237A +1EE56ADC5B2A7F3DADF90ECC0179705A0049BD3A7844C3D8F792439C85A8CD09 +9AB53D3DC13C85D0112FD877B3983A0EE39277EEE1FF627200BE573719402944 +16352A7A430090B6E9DEF2B388002B8EFCFA9448FB9B9379BB47832DC466B6E2 +C228835DBC59F672D3F63BD0909C6128DB46F6EBA560A227D5A91F6B52F81EA4 +5F2912C2119022150780B3B69C0224C40FBDD0FA0E216671526361ED2C379A9A +63743D302DD08FE437CC63E7078B6990D6AEBDBDD49789B328C5478D36BF2C2B +1B39BED5627E742AF084D63C2CE77E5666ADBD58C0563872537EB827E072DB9F +22EE512FAD2D3F3A638C89FA689C36B7BF0D6A8B1881174B6134C41967B7F539 +82891B10684AF751A5143C17B444E5FFD715A52FB88A504C37FACDFDE5852569 +23F98A7060F16F264B52690E030A05A03FC365A25B4F2CBCD00864A5075AFC24 +5C7E17609D1B045F84696C42063DB18788C5368FC1CA77C5BE509556D4A2F78B +E5E3267286367FC5D8AF6B94F0C8D6AD27DD21FB6A8B8360004F82ACD4496253 +D31B544CE8D5BDADDB81CAE0EB5E072AC6CC4DD3FD495115354AB93067CBB6E3 +560AAD419A4445528B5316E7D0198825DDFE73628FA4B0CA39F8A88CFCA923AF +2346E469D4002CE612FB6B71F213E2F183AF448DEC02E04BB7DFE662572C87AD +EB3C52A9795F8C9AD1DE39F05D6AF9781E34F191EE5044FB30D3B733CA40EDC5 +8547FCD0297E8AE949D1A3FF703CFD66D4B7FC94E88C42394D99B79AAD2329AD +E7A589552EBFAE3F07376467B7BBCB08A0F90071A154F5E51399CEAD2D291F39 +0CCA15489876D6617E6928872895E46A51DCCFC2D230B160E54AAA7DECD7066C +5A70C11B2704EAB8132F1B7D6262551215EECE958ABCF01ACC98B1CA1484642B +96B3B254A63778C385E92F249978AEC54511BA3F36CF60D058919414C1800605 +57B45DC98B556A350B99C5E0488ECCDCBB8D9607CDF40FC2FFDDF6D9B9032299 +009352CD70B5E7F89F69960B2359B910C31851C9478E4340479263B6DFB52F96 +C64007C7FB5489D6E421DF86E7A4207BD83C69F567BC0887BB58F1EE69351DAB +B7512B0C015B8CB97591F7391F584C08CBC3AB58658118486E77D64F0AB9C269 +6BE51B5C2BB6DAD8D7544A1A0B193C3AA33527B5461B23A7EA9C5E622BA43C1A +2867ED9F4B0BF1195476C6C0EC5017266CF262B192F80F794D88BE78AB09EB98 +B5BD32FED7F47AA7DB208B5AD86F78A5730DCDE533B1A7ECA8ABC3B0EF02ADDF +CE0B9967B2865E13DD17F3C2B89111FF6EC170D1992242654B8F31605BFD5164 +44DEE30EEE588718A15299C93C7E862DBB3ED2204D5E04F19740FE75A7441380 +F554BD5FF4A65D59CD6666825113C4C9BE2978DCC651B5A9B49E371DF112DDA7 +78B1E5AB7CA9166F1C563BE7B0C3194899993554F063E42FFE0772CE3296ED0C +C4A04A6CCF168BAC5660A8571E858D5B0F539F541258A6B5DDDA73E09AB4A76F +9F2F3C88999C5ECCA90E9A8EDB3C7FF5C7FD207D93DC1FECCC650157C24A8E93 +5727DCF4D05497575122E59237EFA9A415B0780684B752072E05E453B83A678A +7D5D5C3350DF128572364D93CB4B714C53AE7652D8169CBC4BE48F5A622AC156 +75FF33D2CD347D849D7F4014E39F6E4A8FB4789B1B2AE9F3A87AB86148EF3FCE +45ED77E90F445D217495696827A429285FA47C3E354E35089916FEE4EA1867EF +C6BDC2AF437D6AFECA803BDA1D8CC26B167FC8BC0B765E6C4FFABDCB486E7544 +C9DAEDFD6ECAA9E900F5CF7023CC8AC7AB951C91CCF7A18FF33ED6179704CDF5 +EC6E9FEE72E88936E7CF3B4E14E52CDB046E18E7DD7A7622EA804F31D9F072B8 +99AF8495782D70CB3D445848D607A3BCFAD05FD16B8BB3470B211F3967354B88 +87D554B30A78BF185D2890F38A1BBE0C7FBEA09EF87008A89F301800AD9CCE1C +4C9FB2ADE6B3739FA207BB2C70CE7F6A19793B6508B6C19739D47FE0C6D7B3A3 +D2A9FFF6F8AE4458ABC9BA6167C8B31107C119BC0250494A59897FE380772A4C +0B60C20D44C218A9042BFD7393DDDDB6B6EDFF203AC1BA06D53683E9CC93C557 +8DD8395C85F8ADDB3BBF5A15F6812755C88EDC58A1104E643F9C81693B70E98C +180103127A6D961E0B41759DA615D317680399B30CFD39D3DD1311CD36EFE597 +FD8485DC0FF421D31F1912930BDABF8877950752B9FD2557A74EBEA591CF6D45 +487251DBB4C19B2D12795EEADA7A4A89C2AB877B9D14551EFD649B7868963F26 +D8462C12256B122B7F56AEF135C88021CE8ABEFC1D42CFB7DC62784C25121B72 +E5792A3CF4E51A5515CC2363E123E27AEA04B0D3C92E5C2719E202654DF7F093 +E67C0A7EB730EB302E4D69BC25236252B6AEDD1996D69F8FD52CE72184FB8B80 +396C24CDDC54F2CA5E27839DE141299FB7BC8509F9874C4BED39B1D6551BC6F8 +AACBCF458336E95F4D87375B4FD0476C7C8553E116CC281D74E71DADDADE6D42 +75ED626FBC9F9D637A823531F3C194DFDC6B19CD129FEFC0A3D8978F49DCCA5B +2F54B45C85DF463F65E9982246FF70E11CAB3B011F8645419D07615F900D77B5 +45180E311E0C6C1FFA38F4916C92205E2A26B559C00CE8798D853BCA814C31CD +2C00A445B22328C5ABE1858AE7D45A37B762F21AEFC382E026BCF18BEFC22C07 +1F5E5359FB89C8079EBE1E61C2E947B42B60591465FDF2068C9548934812B394 +8288405C376429709CC2F0A790A676312A1F7B6A2C201A835D23F7915AF31C9E +D16AE13C31245412952085C6511983B603D5A9C4D948ED4E5688D444B92040D9 +799E567CE717B7D10212A4CDE7196A055E661155A06D5BAF79ABECB174D1314C +9BFA608B4A1BF31F3298BD908EE724A656356037573F643696C7E50229A02801 +4F869145725CC69457D983A9EF5A091D52D089B81FE9447358A275D1AD2D5FC1 +C174122BCC8C7D6AC9B9CB78962314A9DD8FB8F2DEB144A6B041D160C9095D25 +F72984D6191AF657489DB7A787067700522FBDEC3A25D13CAD71DA2E44A5F9C3 +B8F5983A564EAC8E7840366BC6045D4885AA5278A704AA73742E7DBA94245260 +587BB24460D421703E6A279F8F583F1385FE0729622A17A070D9AB48AB371A10 +A6D0A5DF77250137667BD4B96F13B55B07B6D2477B1EADF3F55BBED7C7D1330B +073AE7BB89D1A4F5062A4A3B2B0EE53B21EB748D1353FEE8DB441446127BE568 +9440CDAA3C1EE4FFFCAE52ADFA631475438CBEDFBAF3CB40A1D65D47F27A48AF +E88F57F50FAC2CB424A9F35C93C7473D2E9E361125D92642D2C25CBC9BE82D79 +E62507CEB5093DA15CF3EC2E4C99BF6DB1B84AC71720544DF2F4CA7C00046DA3 +60D2254C7320B2ECA36A68E92ACDAE4E3DB361F115C6C82C24EF3C0E773A42D5 +0AD85ED3A753A70DA18AE80B34C590BF0F787A60F6A06412E4D5B169FAA5AE73 +3FF4D5F97AEE71FC0EE1FE6D8C39AE67E9B599D4547F85DF41C5BEDD0BD876B7 +F632549BD6E4CA2D041DCB92DF49269B2847405A6C2908EBEBE3E23398C00749 +616A087F403C0F7A904402844A9F3F8D12ADC69B62040676E5E7471F3037BBEE +B702C43E180647CB3B204F74B9C352BBAE635DE85696690CC58BC3C5DBF00540 +88B756FFB12843D8A477B81BE67263A46350B690E754988E24DB1C03B2EF9A98 +F6138987079C2DF69E4FEF592FC203445BABE7001DD2DB39E9F3C3080DA2ED50 +77F717628868E0021A5E9233E61FB3C3389583D83C22B1AA0391CAFFD924430C +88DA60D5F27F7BA6C8FE1980DBC7717D726F799FD710EEFD2BBE10FD89650E1C +756CAD4438B0A64ED5CDFEA5D0C0D1E6B3E69D279DF532F73AD95D11181D9DFF +A3E9489C6BCB2EDD8B807F9431080047ECA1F1DEB062130B04CCD30DEB378095 +12DC6D807C64164663DB8A54768FAD151DD8A6465CC0421E00CF88BA29E7D010 +86992FAABA0691B2FE05454AB656190AF690143008D4476DC3B66C69FEB150C2 +70FC9E986D7A82CDE0A24BA276DDF300EA9656A8970744BEBC5A864FA3CF9956 +2D2621AAF180783FCDB677A7DB384B0A92CD42C10AEF2A9D8843388B059C9AE8 +F020FD785AC36F258D75BE391B7E085C85C14EB3E9AFAF18AFB7A4E8B8B79CC1 +136070F037E37BC1B62E37A77FBA9FB2F46BFE7196B17D6B84F49959819DD1D0 +1C2ED8034D3E34EC34CEEE4EB129AA5BA15A0D4DB4D8796C50363AF98E460100 +0ED834F1FFEDFA99DA4678784D50DF9A5D11148E7E79E8FEA75D9BA7F5CDF435 +A145DD3BE0C8B711AFD17CF7F909EA1FB9CFD4C1717545A59FDF0BD14AB7DAB4 +795EC7C47EA8195D1C49AA123D0769F276FE1C61A4168FB7328B173EE86B6BD1 +B43BE66C925135EDBC52A3828BA722AC70C21AD47EBCB8389D5F2CCC6B458F9E +304027EB16C70E4AF5E876D73AC63B62FB286BEAFDF3A8FD4A90814C9511AA18 +13BCD561D54E86C0ACB8FBDA3FA8712D746D261AE0E2A3831196F227CAB7A847 +FA1D9D6B3C16ABD37D826433F2E0733B55CF8C01FF41265903CB1D8124FDDF53 +08CCA5FAEF161B11B73566AF119C1E3B46771DA6E64A5D38357CEB8FFEBEC145 +3F6C04D2391BE10CED95526744A7254860B862328ED2882DEAF17B785BAD0CF9 +CE68162ED656AE163928E851235434DE64544B21EBC47BB9682CE60E17947EC5 +AABBAD6722DC8473B18A07DF13391DCB29E0169354454B0652A0DBC955844906 +139BDA0BE4EEE9DE6EBDE41CE534C9740A75D079974B8A75B0B6A90FA55766A1 +5B5BF32BDAEE12311BAB2831ACA44CD3953649803DF0A57A5555B33E2CCAA124 +4FAFE2953F67D3B891444C4210419C589EF3A4860FFA77442634CEFF8AAEE32D +BD9E2BBD1726DB317638D497BA8F34958F5D947AC24E89BCA6689CD0178233CD +ADA6E10649966FD2E7A40FB877F9FB2ED1E98043847C4089CCA5C02D6BF671EC +DDC0AB16A1B96D4D3F46B0BDDBD6CBC08E78A1F0FE0BE577F5C2658E56E76411 +2AE3E36B4489125B30C34F50B2FF086FC52C07FAA51C7374FEED8FA2E499116B +62DEECD96152EC9F97BA2840DE630D9FF069908CBA92DC4478D6AF9873E84C49 +8372CE8BED20411E90A7E80F919C25DC44EE7019D4BC928985DA5DE620481AFA +A13B66A64025D97E365FE5335AD4AF076408350BA62D1BD9434B008BD4E64773 +CF6CD42F176DE673805F052E4050D7B4810FE0340BDB4D517018C9A4F4C357C4 +6C4D0FD14723248FE456B091587AC404D293D885885ED7A4657E36F76C9FAE9C +C3D80604023DE93CDA65726C8CAC2B9106D0615132F70A8D23BC43E5E475712A +1078EC1EA16801732127AADF396A0028B3296D6D1769AD7773BB03A8272EEDED +E36F76030DDA855E25B5753025D7C405BD95873BC32972AB992998F5B5A46108 +4F5AD890665234A77DCFEB4F3336D0936A59CB05C4814FD743CF1B5C44528872 +3EEDB0B7D0C6D621CC38B1745F3072244D5DA13FE3859980120029A1EAE2421C +C5C14C3BD89D58A1D7F93ECA5DE9685F54F4E64833FCF95BE8C5AB2026554398 +E8F787DB595F1B5661D0E69C7357DF82CB478BF52055C73DD6C9987A0E3FF814 +B3A62235A1E38EA066F2DF9A01D52CC3162BBDC7C9290C093BACFAFB35BE4965 +3D4A82A2456381E8C69D7303B9D6C95C1FBCBA7A5B886870C590A3EFFEE9916E +1FD5EE9C00BB1712A05D625B3B75D63C449EAF96438DE3D56905879B39C338D5 +1801E834A438361ECAD75D85579CACA00C83DDD8F53A587DA9463BA3DB07052A +539DACB330560FA30AE77E239ADC1E1ADE16FF555AA32195EA2DC865D1173A72 +34EBE565B08C25E6D2E012DEE128ECD369410AD22F2354DDDBA62461C0B25DAA +28A61F7CA33A5D405253921E83916C01E5ECC9BDCCDE9A8E9F83028F47F61154 +549ED5E9211CA29E46553BFBC1A066BDAA0F6988F420764C3A102D1CF352A4E5 +4A649EBDD587D56FB89FD9BECD7F1DA1FE2A0E5FDCC9F741B624B0C641B6F174 +14B0F0E9791E794C4FD628577F55F7F480640362A61280CF59699EFDC74B6183 +30C720457BD73038C8514DBD4B479A7AE28317348C5016A2FB5795CC7D0EE466 +46BFBD0FABC8D9D20BBF133A4C2456A51BD68A4696A528534AF2ABE6A503DC76 +D2C6633BD227A02ACC62A5313B9DA70B4BE5BAD8BFEFF3DD4224A6C6D96BD232 +2217DB0450A68C788EAA618404CB7AEF9CB75BAD39F59092A13C9EFF7FEDDD5F +1C872B80000949C6FF418F40838CC3371AD625BF2A51F46EA2F451F29381AE8C +719E96B544772E43DC60DBE33575ED357C59BF146469C50880EFCEB8D91A76A9 +42A52C5E20BA7213ED6D12580D4E12F8D5C8D0E731ADCB6DA94D1C498A1C8CA3 +B88F5DC29063E043CB1610ED9CC0EFEA122B3F9DEBD2FAF31FA8C16D39B41049 +D5586DBAE9F3BB680CCE74A053416241090D0179929A5D17047641E9E01145EF +04C59DCA92C99C72A6E450FDD462AA97CD724F91E452A6C7BAF10F9663F370BD +82F1DF6821808F3EE971F8AD22F10129B55D3C69E43F8EFD8DCFE64D191BDCEB +6F3813ECFEC667021FE72EBAA04083F8773490ED73F110C094FD55BED46748C2 +2BFD936C952ADFAEFDD97BD87B20D791780AD6CDAA8652BE4F068EB14040FA01 +CAF3F15246AD0487A2728432B37CDE9ADE14DC6D8AC1DD9CD3A5333C5F1A0ACD +CC181A050655CFDB8596083A64E819D17C5E5ADD32462B04B346523B1D2FE542 +BB3267C06C3A45F451BF28E32A8930D145CD4B394119EC00A4502DEE350BA643 +EFB74F01F32A7015975DBC98B448530A6779E6638E42999F51636FDABD6B58F8 +E3995339F7FF3A9F52241F9917E32A3F610B66C711882BE72751B7B73886C167 +C626D934DDA1387E89D9A13B88628935C5E6991032DB69EE9D00EE530D2BB5F5 +B45053FED98719EEE851E1A36DDBD83FF86B80F5FC12216105DCECF8C4AF41A9 +6E412E0C2F1866F53139131638AE35A73911B1D96C8B8FA40C246CA8E9279527 +1F99EF9285EFDA72715F52300D473FBBE977F5C5DAFE04BDA286BCEA940E3FA2 +BD7FAAF157480021D1211C2096AB1974A154D0091121E018EA0399880B21A260 +81670B26887BF14959D4A21FD139836F4126544A51084977F044FEB4810393F8 +418C32E0A2A0C03302D333D1EC32C188F311A1924CF48A2FDE0700430AEAD23F +3FA4B230472208A940EBBDB7826237F4B6F73071268A49C220DFA4B9FC0144CD +FBAA4602E33EF7541AFC3D5472F4525FE4F74ED4CE53389021E711C9AA8F0FAF +B674A8F62C2D317FD8091258DF35B0D69A0ACF64C2BC79342811FD4D8A04E08A +5D6DE5B96C1900E69370B6D0321A2A8D315D785F761E5BDD3343A66D5CD0C809 +827F0265C6FDB14EEFBB75A907967AF5ED715E149A91F8213D915C6C60FD33FE +48C36645F4F476A130319A1AE332F73DD76EDEFE02F7E97ABB3D11F2E8504356 +99C0747A3CBDDF002C25C051E1C7DB92E011470F9E309FDCE30E6ED8D78F1583 +F5F8F74A2BC4355B6D9DD29AA0D57D9A8652C86F9F33766FF16CDABD7799ED6B +D399950C2C728EE95AD880B1A4EA0042E5B198BF647F5BAB61CB57F8F2450E26 +5BFEE67F5BDC4A8C97779F64B6959AB1E23A2BF752CEDEAE0834ADDAAF780986 +A11687EC66FE8FA4610D606713788A0C34EE603E3A9538B618AC2EFFCF16E5BB +18DFDC3EBB84602E03743E72E7D0CC314FB59554929DA6924DCCBE64045721CE +6A9A5116A3F2B7D78B8E7FBE7B79FC55EC16451655C9087A602D1CC33010CD8C +369E7DC96FA6FCDAC2EC05ABBF5DB82E1718D05AF629101D5D7635E1E2D378EE +A123456E311F4237F4A165CFAE5F2E2F83A0F39A0BFAF5C7B6AA4CF14E40590D +3DC9A7C67395092377734DE58E150427CC6BDE166ACE44227ECB056AFC5A11BD +F44260CEEF1C53B8935978197789967A92B1F3575B41613D87E926B9B1AF03E6 +8648392B7CB2BEA66D0D7619BA23B47EBC5DB07DC2A8997B30BB7F63F98E9D70 +DD2F945777A74D7B36F8BC00571C96CCDC1397CC4E531507B135C71F263AB868 +F87E02A47C7D8A95E4638E7E3BF14180DA09BDEF281A8ABFA5DFEA3F412C87E5 +B45F24D87418C1E397824D73C2D785650ED15D868B011E1AEE36AFB32DAB82F2 +8AC23958148447CBD2E57283AF4742299D8B865FAB70AF4ACBD8FE6C00CD6292 +2FF0A88E9B3B95EEEF82A31322E79D8E3548F582899214A4A862FABBD1937E4E +3FE6CCFFAEDA522E9EF53E33BEDF7EFFC992CB8CEA8DABE083475DB864376158 +931D93B618F8D98CDED544817DCDB2345C9F769B307736432DEFE14FB16735AD +7B87C42EA7844A47AEF6DAD0CADFC78780E5B980D00C2BAA6BC12F94AAF87C2F +863D3392D9F92AA698BB6DF8D6B8F18D87BCEA4C7EE1686F079F72EE73464042 +8B001491E8EACADA1CEF26D90A007E056D8549A0BBC0E350FD74B4253FA84608 +F6AA0823472BE190F6A7B948F68D5369103BBD85C3510CEE91926FE5F96A8907 +C6AB5B3D7A8B6EA04F03F3113B3A06A01D7D7AEA934D5B664727CB5552E26336 +426D31BD1191A1F9BD3CAC8AF1B63087F0280C0F3AA2D139E58912BDDD402938 +BDCB9FCF874D286E2945C8E90EAF47335277AD275B6E0BCB59EEE72E6D8CDDEC +3974294C1422C0961AAE2812AB1C43EC9F4AC1B3E81D1FC06DACF6FF4F17693F +AD1662AD2462B44B4157A687038C0913FB7DE2E25559696F3F2AF579ABB9E4D3 +3E41D238E64A2C1A9C21E2118846B3C8E48F3BF1F4F6EB1F3BF2C0EA8E279DC6 +70A7B1606C72E283B575A8C4375477BE6D63F2E71CDB071900A281D3CDCE997D +01C166295DB3700213BEBA265240675D20B478240368C8B82710F6602E833E20 +C924347FE3953FB574F6EB6BD969FBD04B4FBA3C5D9536FCAABE187875550DDC +2D5F9A446D0951859114659A448E38A36BD37D0CF79B13EB5D68B45B2316DCA3 +DE2C015C318462D7C201AEEDB5C932B22950097475850EEAFB7916BB8D4EE2F3 +1EE3FA20E85B28A3C34168D23272DE3F6A9786138FCE8F18E6337C10744B64E6 +A9D1571FD2724A1D2310DBE3C96ABF6CF93DB3B3DC537E66E5D4DE83DC21B416 +BA779D6448B7C9EDB85F3E71E7393392A0542FE9F5DF4C10B54D54A7D0439359 +B4606E0E56DF9842953E29BAE7AFB52A12DBA546B41EE7DC5EC3968D8C8C0847 +57A145590AA930CD23030C155D3A2FAF64DF4E0C4D1D0F1AB80F64CEEE326F72 +948DAB18CC90BE7E996DD2CCDCBDAE0CBF853B27B44212A298068D18D6DC4444 +D48581E65C28BF8FB9DCF10A7F50CE2840B1A4F451203983E10C4D59C07E6B31 +C35DC6D02A4856E2A6D3FD63B36C9C2BB173F5D5097241D97DEE4BC152873489 +B2E08848165B619F84BB425E29F9A661C772C45774EC3F0260309FEE571E954A +B77B06E59228808FBA8F8D6EF67541697CB4E736FAF12CF1AD56C1AF3EEE2F53 +B7E837630C9E2EED1680783F523375E387DA32184F061DBDEC0C7582B3E9EDE3 +8B35BC9EA4C95731C3093507AFDA346C47B5F5A59FD126C5684AA4C487FE5543 +ACC5CDAC42A58AF0B8BB78FE767C96BF200C1806C5495818304F13596F8EBDEF +EA38FEBD5144593F8CC99CD0B5554BB262120C5CA0035038C8D573EA43696E6B +9E8273A62C8C937DC7FE34BF4AA143171024659796E12E3E3A38F05039FAC149 +B5632CAA9DBC7FE569D7DFE18F57C98400B39FB9D00B7826F4C5522C431A7A60 +0DA851DC945B494CD977767C5FFB69623CEF38C19C3A3D5689CE2A287FF22EE6 +DBD82AE1C7791E2C15EC430B00083DE7E672B9795A1CFD5A8E8CAA7F0CA0E7A8 +B6631A3F943362D862A114C8FE66255B882E82DD604F1B723C05F8DFDF2EE6D4 +39C21F35D99ABF1E1FF19BD0B327DC6A0AE410D1DAE017CFACCC7E8286EC4125 +7F86E2951A4B4D01FB058F785397F079D370682282D164264801D3A5F59D8FD3 +514E781EB5BD1656AA04ABA65F0525F366B792982124D6861E2861A6E3D44455 +4331C8B9B129AF407A56A6D5C29632F1994CB864F5978ACA86E56382C5D74AFA +8A05EC9B136950C3AAFFE587573F1F3E16CBD110C30076D082B29666A5E45CF9 +3F52A4B405E0167D24052ADA9E98853D3455220E8640E1CBE4854FBA97462893 +88D824148DF46933044D09F3B03007AE8DB2A52A22DF786D6AA7E990B0772E47 +231F7865B1E394BADB1DD501EA736778C75EEFA1F9A54B42522A1804A9CE08F0 +A7E82E14BC4D4991995BC16CDE6E7915B8710711A18B9FB97A32DCF69CA8078E +716ACFC562603FF79A7B0D7E87A60DA33C0E3C50EBD3229EE1B7461EBA4994AB +0D391441FF59661836D3617738C44AE20B494035C46709FEACBAC37C51DF0ADD +937441C9E1509C1465C86C08CB2DA4028E873968ACC5E0EF8683EBC9280152F9 +69011E2075941CA66DB2110C971D5778FBC13ED24470BAED6565C244DEFCF245 +797B16127CBC1C08A4B6C4F7D4A9DFC92DBFF7B59C64ABA51243129287F85886 +DE1926D3232A035CBAB7B47266B4A1084BE1DDD7FB7D0E4591345F039502C727 +486712BE3BD19DEEBE744CE2FEFEB6F26C3C17C54A21581A51D4DA8A1AA11056 +5109D5936109AA310ED6499B0E5D40CE7B2361F955816A2599509C2C74F16500 +F74D8CCF0E7F0B6ABFECAEA687E037E5117D97B20DF518643251A0E460B4F6EE +84F171DF6E51F0566D797026E96C1B1B607D5FCBFF7736E780636B1EBBC93826 +AF5665D8F5ADD711B47628DE98DB2C04BAD30BB7D585C116D97A5F55B517658A +24E9325EEC3956E66151ED897102036DA56B80C8FFD40644B78B1AE1265EF578 +17053339690655C02BEDC59321C51BDCC90A17908E21275318292101AFF192D0 +B966D7F13FD49C0A4B6DC01D0B7CC7787D549409E8A4A9DA24E7DA5C6F736A23 +6C82FFFA8E80A9AC290FE9D9C8F480B15252D8BEF76A8E16E106B82C8BA1762E +70D3EC0D8CE7FCD065098D9777C456BA6F35F5E382B05BCBCC25725A8BF15CE9 +ECB6B5263D064AB44EF669C8E0547CB22E0950D513BBB39D9329E6388512A58B +C3FAD349A20A1AACB0A5B43130DED84D63C9AFE1DEC1AF4DCA7CE23529D5DF3C +A183F9085F0E21541B14D0262B2C5A8CBC093A5888A607D80C7930C211274F98 +41145F821C06DA96099AE2466C5E15D95C203FD918DF0464E8F9FED955873277 +EE903EFECEFF313E863BA272A489E1C98B4DCDE2481968F69EE63BAFC75EE724 +07AF31DEC2C8040BFB39E0F370C377345C196539E2A50596253BA5D173296E82 +5AA562591C39697668689B03DECE87E2865029A9937E14612BD86F52A25689C3 +A216C44F11760E65D0115ADF2DE08AF7B3B877F317D190CDC54C451881A9375B +47A033559A12D40AF985662431B9AD2D2D3C375CD51D2674AD9968610C072E1D +F73984B844D97C6B4D48A2134180044022745582EA5CA4EC26E73A3FCF265FFC +B42F2A53C3BD3E483CCEBA578A078B3E3D37CEEDD06295559E7AC740C43C8580 +39E9C988B4972D5F53FAF9B9223BDDEB42CE2EADCEDED117FA4A1E5141915C74 +3E6713988FFADB9C101E7EA4E32926D602B4C71CC4E74E2B6ED2C5DCADD466FE +6E59CECB040107E032E8C41C7E8EDC9AA14C19A7BE0AB050B80FCD1724297215 +55FE58D604ED04F2BEF433E4E8D743CCEC8A140C3B88CA2B37783DD21CC210D9 +118843AAF5F1E42C971522B208C7A5EBA00D6C28AEFD2C7CEB27DFEB34C4F616 +E761C946A6485F7A5DBFD921E1C3FA41F927B0714F5549923B1C27F6C704DCE8 +CC14D43F5E61C16BE2030B378DDBB3C28B2F31EB3A9B2DE4125D9CB589803E70 +E1F9FA1D93D9000C9699B28BF58A9B833B66179BD143DF97F4E24226D7521ABF +3FFBD47D0DD8783373FD30EC663646BE383B662A11CA47E53EAB63D102D2D9D4 +6EF28DB89DCD5301654506704455A708CF5AB954536CB43935CBE2621305C53F +8356DE33BB289807C2F25A91855D3EEE681965ED4231B5068A223116300CE8C2 +312618208F8C1E5ACCFB8FDEA53FA3B63167AF02135CC4CCE66A18220BABEF94 +71202D27835A4B33BD1AFAD7FD36F3DA41A48D2424BCD5353D0B5C9AEAE3FB20 +FD00FCE101C595F41B96B18DA7F963A77C1B6F11809C5D5B7047DD7B7ED4F62B +B7333EC8E40F432A9E323DBC7E03FE6E77A80133A731F42698B610B773CEDB2A +03EF63BDE89D3EA8483C7D9D6A3CDD6136D5B59215B5E8A7342F69556C3A3DB4 +7F10148CA111550A9EF89CA6B124A427C270DBC8A87BA8368DE2ADAA2192CF8B +6871079E8E4443615EFF3D40563B7DD45D61F9059895E4915405D085865092B2 +CB3696AD723FB57419FCDB1971DAFC7F0C60DDC9641674162626319268DB3590 +43D1A0B795D92F34FA3B53359BDBAAB0E8AD87880F750E2AC05DDD8EA50FD7C2 +DADE975A9D383DACB1D4BD91CC064808825687E1EB47383BF09E639075446075 +F6D1DA2201F3C9919CF8247F03694671F653A2681048EB85AD38364CC41E6BC7 +B7C320EB0BFFCD328E8ACA2EC0DC397EDD9710A888BDFFB5D7F4C18C9145E604 +7DACEED08D365B9BC4544F06F19AD3E452A468901182D2FB1D86AAAE7D7CCC27 +4D38D73921F3A8BDE658C5D0EC4028F2BFADC53945976FD7DCBA7621CEF2532E +129FAE3421163C288CAC50ADC7E4D9F903C668FA533ED2970ABF1155772C0503 +DA2DAFDC9AE2B9C3E3F69A368E335FA1AE61DB86E3103110D94BC0E579811BCB +A73AEF0D63FA1286F8DF9C3BF0B4CC39A8DD1235763E2E41BF295215303663E1 +089ED4A32C7BA6298D3869758873C687AEB356F9FB7259AFDAE54872D5569F12 +5504DAA00675BED893051226EE0F8CFE97FCF34486DBE79A83138F0C17A4D446 +1DD177C06611752E681DF48A5BA9FD18BBBB4CF93BB4378DA3F94BEC2E499DE7 +301C3C35C1EAC523422A62AE984AFEEB5A3AC132164CE9CD7B6CCA854DBEC672 +5A6E85D0A2929655453B1F8D899B31214416E0DC6408BBC7726F466A75483B9E +82A809966554FD7DA7D129FEF19CCD36485C0C8111C0F65445AE8FA18A88F65B +3FE53F0288488F7FAC353C3D4148316AC6CCB58E54ECC1DF8B1F0A5BE79C037C +1D66B2773C16497D104F5B8FF98997673D0E17D1302010B1EC836AA936BCB8C9 +ECE8021CBB7AA4EDE0807B0E1CC9C73D6063817F37D2E6ADD4213BE9F2FA7F3D +1A905D272D40F2667D0294F06A528E002231ADCCE93EE8D8C83DB1D60177F181 +C9EE9F67644A6DBF72DEB4D6BFBF2F4482EF642FA539FA9B11064017D4E2BE24 +CC88CACF66A8985A5553283ED33DA5F0E0E54A3932FB9F7F7E261ACAC5DBD46F +A0A60BA41D14F5040BFDD6C9ED7B54F1E54C1DA55955815CF354F47DA7E6E2B5 +B64B48650C2205A807683514711EF6D77ACD8BD7F424A189AB88570B1A511157 +F0F3FDDF868AC6E0F0AEFE887E1B962198CE9AD45FE86CD904FEA50730B6D256 +979FFEF083080A0402FABF95848D194235EE82581079E13DD35391EF2798A87C +046F2D8F22FB936BFD373A7B42202DCE9AB3649CA62DA38F86202699F1BF925F +E4EB251D4E62A3715F946EA1EAFAC067FA3A5CB857A683D62BFB3693CE879195 +D566E6303BCF90CF402D61882D8C69B4EB10EA808101D040D1BED63E31DCD339 +BCB74DFD079B9A9B6D6640EFB13271E933FA0ADFEDE7A87538432F6EAB4FE095 +1E6DE7E738ACEBC87D8AAE22E2ABDE4C93800B639FDE1DFF522C7914F23BC412 +AE85BCE949CB0EA61DC23465631126166E79F8F6F5283CF8065EBF661724AC75 +26300339112D345AF28CCF08FCFB79DFD18FE29E46A3635D2A7679EC332C0977 +D990F9FC23974FDEC676EA3103C511303FF0E0E2124FDBC4654C71DC1EF66939 +869F82E023A824A78F2AA914D66DB7766DF78385F1C5A02F06B460E592F38E25 +11D88F3C7C6CDD7778304BB2A7B5034A230F6FD79434B8482E44B5EA0504D4F1 +E1FAC676C1931DF6117C984408693D8347E241BAA7F0C65DB7BA695553BF4756 +7054F0DE33C6C4E8A0C2DB192A738DEC60453F7BDA82698491910126F9762F66 +17B40D677AB73FC5A69D021A3289160A03FABBCF3F5CC97A802B8AE852C95C4C +4F87101381363761D803A9450D2DE0FCE3AB48F13BD859D41BD884A7865174DF +6FE24A98CFAD6B64FF0C2790CFA2E602A4FE1780982982A55A06EBDA791DFC9E +FB456E31FA716ADF758CBAFB7FE82175483B72697F2754ECE0D451386A6C55B4 +7CD891EF8CB7EA1DD3118A2FD37EBB4EF8C6EBDE568AE2EBCB7083937CFB44F8 +D22A0874DF470229839C6B16724F24A6078BFEC824375C550B1000D3491735AB +63BA324E193AAF31FBDA29E4542DAF129275847AB0E01F4D0D0EB02B8B13BBB6 +7BB8B63A9CAA73AD1AEB412A20062EEAA0BE81C9C8D7B6931A7958AEE0F39BFE +7C3FB88133273B600662DA77954C64E4EF8753ABD0537FEBC836EED5D7FA6E94 +B8732A6829536BAC09567036082AA5DC5E2FC04F81FD09CCC2E06A38777E9B55 +3B1B1CABD695328CBD62884B2F3967DBFAD2B34D05EAE84A9D26D3AC5E06137E +029A3DD224DD394A083EAE22983493EDA8E79D44593F2FCE1AD619DF37098882 +56B364BCC055BB078AC5C64FECED4772A3AD84C5F118F72BBE0EC662F711C781 +FF06E7FDF967E976CE2C4AC70C6DF29AB01AD6D24D45BD096361D01F2164D956 +F1817C88F84C20295A78296307CF499B32719D081919B869188CA8F1BE38E78B +036105BE04BBAF24D2D903842C139919961DEC745F9C311C019802024A7DC772 +A2B4298D951A3B32694C680B0838428348CFAA55C4E434290C8F8829A58AD442 +D70095B3EF67AEAD84CC8B5EE39B242DA8AF17CC368109FE09A8255597C93E78 +B55E37529BE1FFB9EC7B130AFA22616E02832D45D20B0D3D724AFBA85D123EF5 +B821F5AD338666B99473238F7D0CC629D84CB5F1E319820BAFE6A9E87D84C47F +F7FEE41C0A4B07DDC4D36F41C5BF46AD6ACF1B7129A2EDAF5B005173AA7E43A0 +5CB99AA0B6BB2A25DD4CAB130511401EC745C2AB6B3CEA7110853B55311CE6A8 +7CEA42FDD8D483B3C05FF2C1BA20F504343B03A84258B30FD0525D323A3671B9 +18C15363EF8CECFD3FFD93170E427820847FB9E5270FEDCE5E00BE05349A721F +552CEE50DABA48AB98631555C6B9C05965E9650C3E8189954957F83D366EA95C +123E37C9AE58F141959767508FE7DAEE0A2797B992E78DE4B79E1FCA9E7C91CD +91C77EC2E1090069D1DE25968290BE7CCC80E1B9B2823EAD8FD92E45C1D44C7C +AC8DACA28397C3DA27DA5D67B706C003A8507F3A1E85F4004C27DB20FEF9CEAA +4D3904E7AD7F556B5F777B843ACE2D6FE00CF8492C101E232E8BBA0F9E9D50A2 +6ED9FD235F8D3DE2272D98836AD4394AC669A855A16125FA754CD81A23B753A4 +638DC517C0762030D93F7F91D0933D197960350551A4748DC67C6E51A3C03D7E +1BDBD11F624AD9DB1E8EAE650783731A176EB7F4F6FDF972F09723689508DB0D +79B1B335DDE06CDE1B2CC182B7F142CD7690AAFE1C0A65B0147C64AD3C4B779D +4C8B99668D3258FABB40ECAF0D8030C030A25DB7835012C03AD5D32C71B16D29 +D8CE2A2402B9EDF8F5FCA404FF49AE12FD47F3A65DE77AF571A4C9BBFF6EFC1D +15EC16083AF4F28C3C2CF6A3C38A3E255C90BF5CD91AE886EF07613CEF333B6C +08EABE48D7D9A3BBD92955FF6960DB410849946B1D769853D6F1CA89E405A8FF +F96E7B3E7845567B4D639D058447B793902544A125F76421E6760701E50BB9B9 +B2DF78815C771F3EBFDEBB80E415C29D661A2095793F93325F4DD948E78F2EED +DC7295EA159C9102806E0FB888284AD7D128AA9CCA6971245CB62695B1731355 +F0818ACEC8681721C36DFC80ECF0E9D59589080E941B049C772194E83DE1E26E +D05087746F3EF6595180C4480008CFEF2F0AB926519BA31392E3A84A07F2C0B8 +5890AF6485B5AF0C01DD099D6E8C46A1C177E592EFB1AA43A4C225136D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +TeXDict begin 40258431 52099146 1000 600 600 (libtasn1.dvi) +@start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 +2[41 43 30 30 30 1[43 38 43 64 21 2[21 43 38 23 34 43 +34 43 38 11[58 1[43 2[52 1[58 70 48 3[58 60 50 1[59 55 +1[58 7[38 38 38 38 38 38 38 38 38 38 1[21 1[21 31[43 +12[{}45 74.7198 /CMR9 rf /Fc 134[39 3[39 39 39 39 2[39 +39 39 39 2[39 39 2[39 3[39 97[{}13 74.7198 /CMSLTT10 +rf /Fd 134[39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 +39 39 39 39 39 39 39 39 39 39 39 39 8[39 39 39 39 2[39 +1[39 1[39 2[39 1[39 39 39 39 39 39 39 5[39 7[39 39 39 +1[39 39 39 39 2[39 39 39 39[{}52 74.7198 /CMTT9 rf /Fe +133[40 4[51 35 36 39 3[51 76 25 2[25 1[45 1[42 51 40 +1[44 7[69 3[70 63 51 69 2[68 71 86 55 2[36 71 71 1[60 +70 66 65 69 6[25 58[{}32 90.9091 /CMB10 rf /Ff 133[52 +52 52 1[52 52 52 52 52 52 52 52 52 52 52 1[52 52 1[52 +52 52 52 52 52 52 1[52 8[52 7[52 7[52 52 52 68[{}29 99.6264 +/CMSLTT10 rf /Fg 133[40 48 48 1[48 51 35 36 36 48 51 +45 51 76 25 1[28 25 51 45 28 40 51 40 51 45 10[68 7[68 +1[57 2[33 2[59 62 69 18[45 4[25 1[45 28[51 51 12[{}36 +90.9091 /CMSL10 rf /Fh 214[35 35 40[{}2 90.9091 /CMSS10 +rf /Fi 134[52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 +52 52 52 52 52 52 52 52 52 52 1[52 25[52 18[52 52 6[52 +42[{}29 99.6264 /CMTT10 rf /Fj 134[65 65 89 65 68 48 +48 50 1[68 61 68 102 34 65 37 34 68 61 37 56 68 55 68 +60 27[81 18[61 61 36[68 12[{}28 109.091 /CMBX12 rf /Fk +130[48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 +48 48 48 48 1[48 48 48 48 48 48 48 48 48 2[48 1[48 34[{}83 +90.9091 /CMTT10 rf /Fl 197[25 58[{}1 90.9091 /CMMI10 +rf /Fm 197[33 58[{}1 119.552 /CMMI12 rf /Fn 134[85 85 +2[90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 +90 78 11[124 112 90 4[126 4[60 2[101 1[124 117 1[122 +12[81 81 81 81 2[45 46[{}34 143.462 /CMBX12 rf /Fo 240[45 +1[91 13[{}2 90.9091 /CMSY10 rf /Fp 138[62 62 62 62 1[62 +62 62 1[62 2[62 62 62 1[62 2[62 62 32[62 14[62 2[62 62 +45[{}18 119.552 /CMTT12 rf /Fq 134[71 71 97 71 75 52 +53 55 1[75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 +65 11[103 94 75 100 1[92 1[105 128 81 1[69 50 105 106 +85 88 103 97 1[102 6[37 1[67 2[67 67 67 67 67 2[37 4[52 +52 27[75 12[{}51 119.552 /CMBX12 rf /Fr 131[91 1[40 48 +48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 +28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 +51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 +68 1[43 1[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 +25 30 25 1[45 35 35 25 2[45 1[45 25 19[51 51 53 11[{}85 +90.9091 /CMR10 rf /Fs 139[75 76 4[108 4[54 6[108 94 20[116 +26[97 49[{}8 172.154 /CMBX12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +/setpagedevice where +{ pop << /PageSize [612 792] >> setpagedevice } +{ /letter where { pop letter } if } +ifelse +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop 150 1318 a Fs(Libtasn1)p 150 1385 +3600 34 v 1035 1486 a Fr(Abstract)31 b(Syn)m(tax)f(Notation)j(One)d +(\(ASN.1\))h(library)f(for)g(the)h(GNU)g(system)2638 +1594 y(for)f(v)m(ersion)h(4.8,)g(4)g(April)f(2016)150 +4795 y Fq(F)-11 b(abio)45 b(Fiorina)150 4928 y(Simon)g(Josefsson)150 +5061 y(Nik)l(os)h(Ma)l(vrogiannop)t(oulos)g(\()p Fp(help-libtasn1@)o +(gn)o(u.o)o(rg)o Fq(\))p 150 5141 3600 17 v eop end +%%Page: 2 2 +TeXDict begin 2 1 bop 150 4523 a Fr(This)24 b(man)m(ual)i(is)f(for)g +(GNU)h(Libtasn1)f(\(v)m(ersion)h(4.8,)i(4)d(April)g(2016\),)k(whic)m(h) +c(is)g(a)h(library)e(for)h(Abstract)150 4633 y(Syn)m(tax)31 +b(Notation)h(One)e(\(ASN.1\))h(and)f(Distinguished)h(Enco)s(ding)e +(Rules)i(\(DER\))g(manipulation.)150 4767 y(Cop)m(yrigh)m(t)602 +4764 y(c)577 4767 y Fo(\015)f Fr(2001-2015)k(F)-8 b(ree)32 +b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)390 4902 +y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 +b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f +(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 +b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 +b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 +b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 +b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 +b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 +b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 +b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 +5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 +b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end +%%Page: -1 3 +TeXDict begin -1 2 bop 3725 -116 a Fr(i)150 299 y Fn(T)-13 +b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fq(1)135 b(In)l(tro)t +(duction)13 b Fm(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)57 b Fq(1)150 911 y(2)135 b(ASN.1)45 +b(structure)g(handling)16 b Fm(:)j(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)61 b Fq(2)275 +1048 y Fr(2.1)92 b(ASN.1)30 b(syn)m(tax)20 b Fl(:)c(:)g(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)50 b Fr(2)275 1157 +y(2.2)92 b(Naming)18 b Fl(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)48 b Fr(3)275 +1267 y(2.3)92 b(Simple)30 b(parsing)21 b Fl(:)15 b(:)g(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)51 b Fr(4)275 1377 y(2.4)92 +b(Library)29 b(Notes)18 b Fl(:)f(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)48 b Fr(4)275 1486 y(2.5)92 b(F)-8 b(uture)30 +b(dev)m(elopmen)m(ts)22 b Fl(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)52 +b Fr(4)150 1729 y Fq(3)135 b(Utilities)16 b Fm(:)22 b(:)d(:)h(:)f(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f +(:)h(:)60 b Fq(5)275 1866 y Fr(3.1)92 b(In)m(v)m(oking)31 +b(asn1P)m(arser)15 b Fl(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)45 +b Fr(5)275 1975 y(3.2)92 b(In)m(v)m(oking)31 b(asn1Co)s(ding)19 +b Fl(:)c(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)49 b Fr(5)275 2085 +y(3.3)92 b(In)m(v)m(oking)31 b(asn1Deco)s(ding)17 b Fl(:)f(:)g(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)47 b Fr(6)150 2327 y Fq(4)135 b(F)-11 b(unction)44 +b(reference)21 b Fm(:)g(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)66 +b Fq(8)275 2464 y Fr(4.1)92 b(ASN.1)30 b(sc)m(hema)i(functions)13 +b Fl(:)i(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)44 b Fr(8)275 2574 y(4.2)92 b(ASN.1)30 +b(\014eld)g(functions)12 b Fl(:)k(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)43 +b Fr(8)275 2683 y(4.3)92 b(DER)30 b(functions)17 b Fl(:)e(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)46 b Fr(15)275 2793 +y(4.4)92 b(Error)29 b(handling)h(functions)23 b Fl(:)16 +b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)54 b Fr(22)275 2902 y(4.5)92 b(Auxilliary)31 +b(functions)19 b Fl(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)48 +b Fr(22)150 3145 y Fq(App)t(endix)c(A)160 b(Cop)l(ying)45 +b(Information)25 b Fm(:)c(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f +(:)70 b Fq(24)275 3282 y Fr(A.1)91 b(GNU)31 b(F)-8 b(ree)32 +b(Do)s(cumen)m(tation)g(License)21 b Fl(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)51 b Fr(24)150 3524 y Fq(Concept)45 b(Index)18 +b Fm(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)63 b Fq(32)150 3794 y(F)-11 b(unction)44 b(and)h(Data)h +(Index)24 b Fm(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)69 b Fq(33)p +eop end +%%Page: 1 4 +TeXDict begin 1 3 bop 150 -116 a Fr(Chapter)30 b(1:)41 +b(In)m(tro)s(duction)2592 b(1)150 299 y Fn(1)80 b(In)l(tro)t(duction) +150 533 y Fr(This)27 b(do)s(cumen)m(t)h(describ)s(es)g(the)g(Libtasn1)g +(library)g(that)h(pro)m(vides)f(Abstract)h(Syn)m(tax)f(Notation)i(One) +150 643 y(\(ASN.1,)42 b(as)c(sp)s(eci\014ed)g(b)m(y)h(the)f(X.680)i +(ITU-T)f(recommendation\))g(parsing)f(and)g(structures)g(man-)150 +752 y(agemen)m(t,)g(and)c(Distinguished)h(Enco)s(ding)f(Rules)h(\(DER,) +g(as)g(p)s(er)f(X.690\))j(enco)s(ding)e(and)f(deco)s(ding)150 +862 y(functions.)275 996 y(The)29 b(main)i(features)f(of)h(this)f +(library)g(are:)225 1131 y Fo(\017)60 b Fr(On-line)30 +b(ASN.1)h(structure)f(managemen)m(t)i(that)f(do)s(esn't)f(require)g(an) +m(y)h(C)f(co)s(de)g(\014le)h(generation.)225 1265 y Fo(\017)60 +b Fr(O\013-line)30 b(ASN.1)f(structure)g(managemen)m(t)h(with)f(C)g(co) +s(de)g(\014le)h(generation)g(con)m(taining)h(an)e(arra)m(y)-8 +b(.)225 1400 y Fo(\017)60 b Fr(Distinguished)30 b(Enco)s(ding)g(Rules)g +(\(DER\))i(enco)s(ding)e(supp)s(ort.)225 1534 y Fo(\017)60 +b Fr(No)31 b(limits)g(for)f(INTEGER)g(and)g(ENUMERA)-8 +b(TED)31 b(v)-5 b(alues.)225 1669 y Fo(\017)60 b Fr(It's)36 +b(F)-8 b(ree)38 b(Soft)m(w)m(are.)59 b(An)m(yb)s(o)s(dy)35 +b(can)h(use,)i(mo)s(dify)-8 b(,)38 b(and)d(redistribute)h(the)g +(library)g(under)f(the)330 1778 y(terms)g(of)f(the)h(GNU)h(Lesser)e +(General)i(Public)e(License)i(v)m(ersion)f(2.1)h(or)e(later.)55 +b(The)34 b(command)330 1888 y(line)23 b(to)s(ols,)j(self-tests)e(and)e +(build)g(infrastructure)f(are)j(licensed)f(under)e(the)i(GNU)h(General) +f(Public)330 1998 y(License)31 b(v)m(ersion)g(3.0)g(or)g(later.)225 +2132 y Fo(\017)60 b Fr(Thread-safet)m(y)-8 b(.)56 b(No)36 +b(global)g(v)-5 b(ariables)36 b(are)f(used)g(and)f(m)m(ultiple)i +(library)f(handles)f(and)h(session)330 2242 y(handles)30 +b(ma)m(y)h(b)s(e)e(used)h(in)g(parallel.)225 2376 y Fo(\017)60 +b Fr(P)m(ortabilit)m(y)-8 b(.)54 b(The)33 b(co)s(de)h(should)f(w)m(ork) +h(on)g(all)g(Unix)g(lik)m(e)h(op)s(erating)f(systems,)h(and)f(Windo)m +(ws.)330 2486 y(The)c(library)g(itself)h(should)e(b)s(e)h(p)s(ortable)h +(to)g(an)m(y)f(C89)h(system,)g(not)g(ev)m(en)g(POSIX)e(is)h(required.)p +eop end +%%Page: 2 5 +TeXDict begin 2 4 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(ASN.1)31 b(structure)f(handling)2068 b(2)150 299 y +Fn(2)80 b(ASN.1)53 b(structure)f(handling)150 632 y Fq(2.1)68 +b(ASN.1)45 b(syn)l(tax)150 792 y Fr(The)30 b(parser)f(is)h(case)h +(sensitiv)m(e.)42 b(The)30 b(commen)m(ts)h(b)s(egin)e(with)h +Fk(--)g Fr(and)f(end)h(either)g(with)g(another)g Fk(--)p +Fr(,)150 901 y(or)35 b(at)h(the)g(end)f(of)g(the)h(resp)s(ectiv)m(e)g +(line,)h(whic)m(hev)m(er)f(comes)h(\014rst.)55 b(The)34 +b(C-st)m(yle)j Fk(/*)p Fr(,)f Fk(*/)f Fr(commen)m(ts)150 +1011 y(are)c(not)f(supp)s(orted.)275 1146 y(F)-8 b(or)31 +b(an)f(example)h(of)g(the)f(syn)m(tax,)h(c)m(hec)m(k)h(the)f +Fk(pkix.asn)d Fr(\014le)i(distributed)g(with)g(the)g(library)-8 +b(.)275 1280 y(ASN.1)30 b(de\014nitions)g(m)m(ust)h(follo)m(w)g(the)g +(syn)m(tax)g(b)s(elo)m(w:)436 1415 y Fk(definitions_name)44 +b({<object)h(definition>})436 1634 y(DEFINITIONS)g(<EXPLICIT)g(or)j +(IMPLICIT>)d(TAGS)h(::=)436 1854 y(BEGIN)436 2073 y(<type)h(and)g +(constants)e(definitions>)436 2292 y(END)275 2427 y Fr(The)39 +b Fk(::=)g Fr(tok)m(en)i(m)m(ust)f(b)s(e)f(separate)i(from)f(other)g +(elemen)m(ts,)k(so)c(the)g(follo)m(wing)h(declaration)h(is)150 +2536 y(in)m(v)-5 b(alid:)533 2671 y Fk(--)47 b(INCORRECT)533 +2781 y(Version)f(::=INTEGER)275 2916 y Fr(The)29 b(correct)j(form)e +(is:)533 3050 y Fk(Version)46 b(::=)h(INTEGER)275 3185 +y Fr(Here)30 b(is)h(the)f(list)h(of)g(t)m(yp)s(es)f(that)h(the)g +(parser)f(can)g(manage:)225 3320 y Fo(\017)60 b Fk(INTEGER)p +Fr(;)225 3455 y Fo(\017)g Fk(ENUMERATED)p Fr(;)225 3589 +y Fo(\017)g Fk(BOOLEAN)p Fr(;)225 3724 y Fo(\017)g Fk(OBJECT)29 +b(IDENTIFIER)p Fr(;)225 3859 y Fo(\017)60 b Fk(NULL)p +Fr(;)225 3993 y Fo(\017)g Fk(BIT)29 b(STRING)p Fr(;)225 +4128 y Fo(\017)60 b Fk(OCTET)29 b(STRING)p Fr(;)225 4263 +y Fo(\017)60 b Fk(UTCTime)p Fr(;)225 4397 y Fo(\017)g +Fk(GeneralizedTime)p Fr(;)225 4532 y Fo(\017)g Fk(GeneralString)p +Fr(;)225 4667 y Fo(\017)g Fk(NumericString)p Fr(;)225 +4801 y Fo(\017)g Fk(IA5String)p Fr(;)225 4936 y Fo(\017)g +Fk(TeletexString)p Fr(;)225 5071 y Fo(\017)g Fk(PrintableString)p +Fr(;)225 5205 y Fo(\017)g Fk(UniversalString)p Fr(;)225 +5340 y Fo(\017)g Fk(BMPString)p Fr(;)p eop end +%%Page: 3 6 +TeXDict begin 3 5 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(ASN.1)31 b(structure)f(handling)2068 b(3)225 299 y +Fo(\017)60 b Fk(UTF8String)p Fr(;)225 437 y Fo(\017)g +Fk(VisibleString)p Fr(;)225 576 y Fo(\017)g Fk(SEQUENCE)p +Fr(;)225 714 y Fo(\017)g Fk(SEQUENCE)28 b(OF)p Fr(;)225 +853 y Fo(\017)60 b Fk(SET)p Fr(;)225 992 y Fo(\017)g +Fk(SET)29 b(OF)p Fr(;)225 1130 y Fo(\017)60 b Fk(CHOICE)p +Fr(;)225 1269 y Fo(\017)g Fk(ANY)p Fr(;)225 1407 y Fo(\017)g +Fk(ANY)29 b(DEFINED)g(BY)p Fr(.)275 1579 y(This)42 b(v)m(ersion)j(do)s +(esn't)e(handle)g(the)h Fk(REAL)f Fr(t)m(yp)s(e.)81 b(It)44 +b(do)s(esn't)f(supp)s(ort)f(the)i Fk(AUTOMATIC)28 b(TAGS)150 +1688 y Fr(option,)j(and)f(the)g Fk(EXPORT)f Fr(and)h +Fk(IMPORT)f Fr(sections,)i(either.)275 1831 y(The)e Fk(SIZE)h +Fr(constrain)m(ts)h(are)g(allo)m(w)m(ed,)h(but)e(no)g(c)m(hec)m(k)i(is) +f(done)f(on)g(them.)150 2075 y Fq(2.2)68 b(Naming)150 +2235 y Fr(Consider)30 b(this)g(de\014nition:)436 2377 +y Fk(Example)46 b({)i(1)f(2)h(3)f(4)g(})436 2597 y(DEFINITIONS)e +(EXPLICIT)h(TAGS)g(::=)436 2816 y(BEGIN)436 3035 y(Group)h(::=)g +(SEQUENCE)e({)580 3145 y(id)142 b(OBJECT)46 b(IDENTIFIER,)580 +3254 y(value)94 b(Value)436 3364 y(})436 3583 y(Value)47 +b(::=)g(SEQUENCE)e({)580 3692 y(value1)93 b(INTEGER,)580 +3802 y(value2)g(BOOLEAN)436 3912 y(})436 4131 y(END)275 +4273 y Fr(The)68 b(notation)j(to)f(access)g(the)g(`)p +Fk(Group)p Fr(')e(t)m(yp)s(e)i(of)f(the)h(`)p Fk(Example)p +Fr(')d(de\014nition)i(ab)s(o)m(v)m(e)i(is)150 4383 y(`)p +Fk(Example.Group)p Fr(')40 b(\(as)j(a)g(NUL-terminated)h(string.\))78 +b(Suc)m(h)42 b(strings)h(are)g(used)f(in)g(the)h(functions)150 +4493 y(describ)s(ed)29 b(b)s(elo)m(w.)275 4635 y(Others)g(examples:)225 +4778 y Fo(\017)60 b Fr(\014eld)30 b(`)p Fk(id)p Fr(')g(of)h(the)f(`)p +Fk(Group)p Fr(')g(t)m(yp)s(e:)41 b(`)p Fk(Example.Group.id)p +Fr(';)225 4916 y Fo(\017)60 b Fr(\014eld)24 b(`)p Fk(value1)p +Fr(')f(of)i(the)f(`)p Fk(value)p Fr(')g(\014eld)g(of)g(the)h(`)p +Fk(Group)p Fr(')e(t)m(yp)s(e:)38 b(`)p Fk(Example.Group.value.value1)o +Fr('.)275 5088 y(Elemen)m(ts)26 b(of)f(structured)g(t)m(yp)s(es)g +(unnamed)f(b)m(y)i(the)f(resp)s(ectiv)m(e)i(de\014nition)e(receiv)m(e)i +(the)f(names)f Fk(?1)p Fr(,)150 5197 y Fk(?2)p Fr(,)30 +b(and)g(so)g(on.)275 5340 y(The)f Fk(?LAST)g Fr(name)i(indicates)g(the) +g(last)g(elemen)m(t)h(of)e(a)h Fk(SET)e(OF)h Fr(or)h +Fk(SEQUENCE)d(OF)p Fr(.)p eop end +%%Page: 4 7 +TeXDict begin 4 6 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(ASN.1)31 b(structure)f(handling)2068 b(4)150 299 y +Fq(2.3)68 b(Simple)46 b(parsing)150 458 y Fr(F)-8 b(or)32 +b(simple)f(t)m(yp)s(es)h(lik)m(e)g Fk(OCTET)d(STRING)h +Fr(the)h(simple)g(parsing)g(functions)g(listed)h(b)s(elo)m(w)f(ma)m(y)h +(b)s(e)f(used)150 568 y(instead.)225 702 y Fo(\017)60 +b Fr([asn1)p 538 702 28 4 v 41 w(deco)s(de)p 849 702 +V 40 w(simple)p 1142 702 V 40 w(der],)30 b(page)h(21)225 +837 y Fo(\017)60 b Fr([asn1)p 538 837 V 41 w(enco)s(de)p +849 837 V 40 w(simple)p 1142 837 V 40 w(der],)30 b(page)h(16)150 +1069 y Fq(2.4)68 b(Library)45 b(Notes)150 1229 y Fr(The)30 +b(header)g(\014le)h(of)f(this)g(library)g(is)h Fk(libtasn1.h)p +Fr(.)275 1363 y(The)d(main)g(t)m(yp)s(e)h(used)f(in)h(it)g(is)g +Fk(asn1_node)p Fr(,)e(and)h(it's)h(used)f(to)i(store)f(the)g(ASN.1)g +(de\014nitions)g(and)150 1473 y(structures)h(\(instances\).)275 +1607 y(The)f Fk(NULL)h Fr(constan)m(t)h(can)g(b)s(e)f(used)f(for)h(the) +h(v)-5 b(ariable)31 b(initialization.)44 b(F)-8 b(or)31 +b(example:)438 1742 y Fk(asn1_node)45 b(definitions)g(=)i(NULL;)275 +1876 y Fr(Some)35 b(functions)h(require)f(an)h Fk(errorDescription)31 +b Fr(argumen)m(t)36 b(of)g(t)m(yp)s(e)g Fk(char)29 b(*)p +Fr(,)37 b(p)s(oin)m(ting)f(to)h(a)150 1986 y(pre-allo)s(cated)f +(bu\013er)c(of)i(at)h(least)g Fk(ASN1_MAX_ERROR_DESCRIPT)o(ION_)o(SIZ)o +(E)28 b Fr(b)m(ytes)34 b(size)h(\(e.g.,)h(as)e(in)150 +2095 y(`)p Fk(char)29 b(description[ASN1_MAX_ERROR)o(_DES)o(CRI)o(PTIO) +o(N_SI)o(ZE])o(;)p Fr('\).)275 2230 y Fk(ASN1_MAX_NAME_SIZE)22 +b Fr(is)28 b(the)h(maxim)m(um)e(n)m(um)m(b)s(er)g(of)h(c)m(haracters)h +(allo)m(w)m(ed)h(for)e(an)g(ASN.1)g(iden-)150 2340 y(ti\014er.)150 +2572 y Fq(2.5)68 b(F)-11 b(uture)44 b(dev)l(elopmen)l(ts)225 +2731 y Fo(\017)60 b Fr(Add)27 b(functions)g(for)h(a)g(C)g(co)s(de)g +(\014le)g(generation)h(con)m(taining)h(equiv)-5 b(alen)m(t)29 +b(data)g(structures)e(\(not)i(a)330 2841 y(single)i(arra)m(y)g(lik)m(e) +h(no)m(w\).)225 2976 y Fo(\017)60 b Fr(The)30 b Fk(REAL)f +Fr(t)m(yp)s(e.)p eop end +%%Page: 5 8 +TeXDict begin 5 7 bop 150 -116 a Fr(Chapter)30 b(3:)41 +b(Utilities)2776 b(5)150 299 y Fn(3)80 b(Utilities)150 +635 y Fq(3.1)68 b(In)l(v)l(oking)46 b(asn1P)l(arser)150 +794 y Fk(asn1Parser)27 b Fr(reads)j(a)g(single)h(\014le)f(with)f(ASN.1) +i(de\014nitions)e(and)h(generates)h(a)f(\014le)g(with)g(an)g(arra)m(y)g +(to)150 904 y(use)g(with)g(libtasn1)h(functions.)150 +1039 y Fk(Usage:)94 b(asn1Parser)45 b([options])g(file)150 +1258 y(Options:)198 1368 y(-h)i(:)g(shows)g(the)g(help)f(message.)198 +1477 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198 +1587 y(-c)g(:)g(checks)f(the)h(syntax)f(only.)198 1697 +y(-o)h(file)g(:)g(output)f(file.)198 1806 y(-n)h(name)g(:)g(array)f +(name.)150 2040 y Fq(3.2)68 b(In)l(v)l(oking)46 b(asn1Co)t(ding)150 +2200 y Fk(asn1Coding)27 b Fr(generates)k(a)e(DER)h(enco)s(ding)f(from)g +(a)h(\014le)g(with)f(ASN.1)h(de\014nitions)f(and)g(another)h(one)150 +2309 y(with)g(assignmen)m(ts.)275 2445 y(The)f(\014le)i(with)f +(assignmen)m(ts)h(m)m(ust)f(ha)m(v)m(e)i(this)e(syn)m(tax:)150 +2580 y Fk(InstanceName)92 b(Asn1Definition)150 2799 y(nameString)h +(value)150 3019 y(nameString)g(value)150 3128 y(...)275 +3264 y Fr(T)-8 b(o)35 b(sp)s(ecify)f(the)h(\014eld)f(of)h(a)g +Fk(CHOICE)d Fr(to)k(b)s(e)e(used,)h(sp)s(ecify)f(its)h(name)g(as)f(a)h +(v)-5 b(alue)36 b(to)f(the)g Fk(CHOICE)150 3373 y Fr(elemen)m(t)d +(itself.)41 b(Use)31 b Fk('')f Fr(to)h(denote)g(the)g(ro)s(ot)f(elemen) +m(t)i(itself.)42 b(\(as)31 b(in)f(the)g(example)h(b)s(elo)m(w.\))275 +3509 y(The)e(output)h(\014le)h(is)f(a)h(binary)f(\014le)g(with)g(the)h +(DER)f(enco)s(ding.)150 3644 y Fk(Usage:)94 b(asn1Coding)45 +b([options])g(file1)h(file2)198 3754 y(file1)g(:)i(file)e(with)h(ASN1)f +(definitions.)198 3863 y(file2)g(:)i(file)e(with)h(assignments.)150 +3973 y(Options:)198 4083 y(-h)g(:)g(shows)g(the)g(help)f(message.)198 +4192 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198 +4302 y(-c)g(:)g(checks)f(the)h(syntax)f(only.)198 4411 +y(-o)h(file)g(:)g(output)f(file.)275 4547 y Fr(F)-8 b(or)31 +b(example,)g(consider)f(an)h(ASN.1)f(de\014nitions)g(\014le)h(as)f +(follo)m(ws:)150 4682 y Fk(MYPKIX1)46 b({)h(})150 4902 +y(DEFINITIONS)e(IMPLICIT)g(TAGS)i(::=)150 5121 y(BEGIN)150 +5340 y(OtherStruct)e(:=)i(SEQUENCE)e({)p eop end +%%Page: 6 9 +TeXDict begin 6 8 bop 150 -116 a Fr(Chapter)30 b(3:)41 +b(Utilities)2776 b(6)389 299 y Fk(x)333 b(INTEGER,)389 +408 y(y)g(CHOICE)47 b({)580 518 y(y1)g(INTEGER,)580 628 +y(y2)g(OCTET)f(STRING)g(},)150 737 y(})150 956 y(Dss-Sig-Value)e(::=)j +(SEQUENCE)f({)389 1066 y(r)333 b(INTEGER,)389 1176 y(s)g(INTEGER,)389 +1285 y(other)141 b(OtherStruct)389 1395 y(z)333 b(INTEGER)46 +b(OPTIONAL,)150 1504 y(})150 1724 y(END)275 1869 y Fr(And)29 +b(a)i(assignmen)m(ts)g(\014le)f(as)h(follo)m(ws:)150 +2014 y Fk(dp)47 b(MYPKIX1.Dss-Sig-Value)150 2233 y(r)g(42)150 +2343 y(s)g(47)150 2452 y(other.x)f(66)150 2562 y(other.y)g(y1)150 +2672 y(other.y.y1)f(15)150 2781 y(z)i(\(NULL\))275 2926 +y Fr(Running)32 b(the)h(command)h(b)s(elo)m(w)f(will)h(generate)h(a)f +Fk(assign.out)d Fr(\014le,)j(con)m(taining)h(the)f(DER)g(en-)150 +3036 y(co)s(ding)c(of)h Fk(PKIX1.Dss-Sig-Value)p Fr(.)150 +3181 y Fk($)47 b(asn1Coding)e(pkix.asn)h(assign.asn1)275 +3326 y Fr(If)38 b(the)h(ro)s(ot)h(elemen)m(t)g(is)f(of)h(the)f +Fk(CHOICE)e Fr(t)m(yp)s(e,)42 b(the)d(assignmen)m(t)h(\014le)f(ma)m(y)h +(b)s(e)e(lik)m(e)j(\(using)e(the)150 3436 y(t)m(yp)s(es)30 +b(de\014ned)g(in)g Fk(pkix.asn)p Fr(\):)150 3581 y Fk(elt)47 +b(PKIX1Implicit88.GeneralN)o(ame)150 3800 y('')286 b(dNSName)150 +3910 y(dNSName)46 b(example.org)150 4159 y Fq(3.3)68 +b(In)l(v)l(oking)46 b(asn1Deco)t(ding)150 4318 y Fk(asn1Decoding)20 +b Fr(generates)25 b(an)f(ASN.1)g(structure)g(from)f(a)h(\014le)g(with)f +(ASN.1)h(de\014nitions)f(and)h(a)g(binary)150 4428 y(\014le)30 +b(with)h(a)f(DER)h(enco)s(ding.)150 4573 y Fk(Usage:)94 +b(asn1Decoding)44 b([options])i(file1)g(file2)g(type)198 +4682 y(file1)g(:)i(file)e(with)h(ASN1)f(definitions.)198 +4792 y(file2)g(:)i(binary)e(file)g(with)h(a)g(DER)g(encoding.)198 +4902 y(type)f(:)i(ASN1)e(definition)f(name.)150 5011 +y(Options:)198 5121 y(-h)i(:)g(shows)g(the)g(help)f(message.)198 +5230 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198 +5340 y(-o)g(file)g(:)g(output)f(file.)p eop end +%%Page: 7 10 +TeXDict begin 7 9 bop 150 -116 a Fr(Chapter)30 b(3:)41 +b(Utilities)2776 b(7)275 299 y(F)-8 b(or)47 b(example,)52 +b(after)47 b(generating)h(the)f Fk(assign.out)d Fr(\014le)j(from)f(the) +h(example)g(section)h(of)f(the)150 408 y Fk(asn1Coding)28 +b Fr(command)i(ab)s(o)m(v)m(e,)i(the)e(follo)m(wing)i(in)m(v)m(o)s +(cation)g(will)f(deco)s(de)g(the)f(DER)h(data.)150 543 +y Fk($)47 b(asn1Decoding)e(pkix.asn)g(assign.out)g(PKIX1.Dss-Sig-Value) +p eop end +%%Page: 8 11 +TeXDict begin 8 10 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2359 b(8)150 299 y Fn(4)80 +b(F)-13 b(unction)52 b(reference)150 682 y Fq(4.1)68 +b(ASN.1)45 b(sc)l(hema)g(functions)150 906 y Fj(asn1)p +396 906 37 5 v 55 w(parser2tree)3350 1117 y Fr([F)-8 +b(unction])-3599 b Fi(int)53 b(asn1_parser2tree)e Fh(\()p +Fg(const)31 b(c)m(har)g(*)f Ff(file)p Fg(,)i(asn1)p 2238 +1117 28 4 v 40 w(no)s(de)e(*)h Ff(definitions)p Fg(,)565 +1227 y(c)m(har)g(*)g Ff(error_desc)p Fh(\))390 1336 y +Fg(\014le)5 b Fr(:)41 b(sp)s(ecify)30 b(the)g(path)h(and)e(the)i(name)f +(of)h(\014le)f(that)h(con)m(tains)h(ASN.1)f(declarations.)390 +1485 y Fg(de\014nitions)t Fr(:)36 b(return)21 b(the)h(p)s(oin)m(ter)g +(to)g(the)g(structure)g(created)h(from)e Fk(")p Fr(\014le)p +Fk(")h Fr(ASN.1)g(declarations.)390 1634 y Fg(error)p +589 1634 V 40 w(desc)6 b Fr(:)40 b(return)29 b(the)i(error)f +(description)g(or)h(an)f(empt)m(y)h(string)f(if)g(success.)390 +1784 y(F)-8 b(unction)28 b(used)f(to)i(start)f(the)g(parse)g +(algorithm.)41 b(Creates)28 b(the)g(structures)f(needed)g(to)i(manage) +390 1893 y(the)i(de\014nitions)e(included)h(in)g Fk(file)f +Fr(\014le.)390 2042 y Fe(Returns:)39 b Fk(ASN1_SUCCESS)26 +b Fr(if)i(the)h(\014le)g(has)f(a)h(correct)g(syn)m(tax)h(and)e(ev)m +(ery)h(iden)m(ti\014er)g(is)f(kno)m(wn,)390 2152 y Fk +(ASN1_ELEMENT_NOT_EMPTY)35 b Fr(if)41 b Fk(definitions)c +Fr(not)k Fk(NULL)f Fr(,)k Fk(ASN1_FILE_NOT_FOUND)35 b +Fr(if)41 b(an)390 2261 y(error)32 b(o)s(ccured)g(while)g(op)s(ening)g +Fk(file)f Fr(,)h Fk(ASN1_SYNTAX_ERROR)c Fr(if)k(the)g(syn)m(tax)h(is)f +(not)h(correct,)390 2371 y Fk(ASN1_IDENTIFIER_NOT_FOUN)o(D)c +Fr(if)35 b(in)f(the)h(\014le)g(there)h(is)f(an)f(iden)m(ti\014er)h +(that)h(is)f(not)g(de\014ned,)390 2480 y Fk(ASN1_NAME_TOO_LONG)27 +b Fr(if)32 b(in)g(the)g(\014le)g(there)g(is)g(an)g(iden)m(ti\014er)g +(whith)g(more)g(than)f Fk(ASN1_MAX_)390 2590 y(NAME_SIZE)d +Fr(c)m(haracters.)150 2804 y Fj(asn1)p 396 2804 37 5 +v 55 w(parser2arra)m(y)3350 3015 y Fr([F)-8 b(unction])-3599 +b Fi(int)53 b(asn1_parser2array)e Fh(\()p Fg(const)31 +b(c)m(har)g(*)g Ff(inputFileName)p Fg(,)j(const)d(c)m(har)g(*)565 +3125 y Ff(outputFileName)p Fg(,)k(const)c(c)m(har)g(*)f +Ff(vectorName)p Fg(,)k(c)m(har)d(*)f Ff(error_desc)p +Fh(\))390 3234 y Fg(inputFileName)5 b Fr(:)49 b(sp)s(ecify)34 +b(the)g(path)g(and)f(the)h(name)g(of)g(\014le)g(that)h(con)m(tains)g +(ASN.1)g(declara-)390 3344 y(tions.)390 3493 y Fg(outputFileName)5 +b Fr(:)41 b(sp)s(ecify)27 b(the)h(path)f(and)g(the)h(name)f(of)h +(\014le)g(that)g(will)g(con)m(tain)h(the)e(C)g(v)m(ector)390 +3603 y(de\014nition.)390 3752 y Fg(v)m(ectorName)5 b +Fr(:)43 b(sp)s(ecify)30 b(the)h(name)f(of)h(the)f(C)g(v)m(ector.)390 +3901 y Fg(error)p 589 3901 28 4 v 40 w(desc)6 b Fr(:)40 +b(return)29 b(the)i(error)f(description)g(or)h(an)f(empt)m(y)h(string)f +(if)g(success.)390 4050 y(F)-8 b(unction)42 b(that)g(generates)h(a)e(C) +g(structure)g(from)g(an)g(ASN1)h(\014le.)73 b(Creates)42 +b(a)g(\014le)f(con)m(tain-)390 4159 y(ing)k(a)h(C)f(v)m(ector)i(to)e +(use)g(to)h(manage)g(the)g(de\014nitions)f(included)f(in)h +Fk(inputFileName)d Fr(\014le.)390 4269 y(If)i Fk(inputFileName)e +Fr(is)i Fk(")p Fr(/aa/bb/xx.yy)p Fk(")i Fr(and)e Fk(outputFileName)d +Fr(is)k Fk(NULL)f Fr(,)k(the)d(\014le)g(cre-)390 4378 +y(ated)g(is)f Fk(")p Fr(/aa/bb/xx)p 1188 4378 V 41 w(asn1)p +1406 4378 V 40 w(tab.c)p Fk(")p Fr(.)83 b(If)43 b Fk(vectorName)f +Fr(is)i Fk(NULL)f Fr(the)h(v)m(ector)i(name)e(will)h(b)s(e)390 +4488 y Fk(")p Fr(xx)p 540 4488 V 40 w(asn1)p 757 4488 +V 40 w(tab)p Fk(")p Fr(.)390 4637 y Fe(Returns:)39 b +Fk(ASN1_SUCCESS)26 b Fr(if)i(the)h(\014le)g(has)f(a)h(correct)g(syn)m +(tax)h(and)e(ev)m(ery)h(iden)m(ti\014er)g(is)f(kno)m(wn,)390 +4747 y Fk(ASN1_FILE_NOT_FOUND)39 b Fr(if)45 b(an)f(error)g(o)s(ccured)h +(while)f(op)s(ening)g Fk(inputFileName)d Fr(,)48 b Fk(ASN1_)390 +4856 y(SYNTAX_ERROR)23 b Fr(if)k(the)f(syn)m(tax)i(is)e(not)h(correct,) +i Fk(ASN1_IDENTIFIER_NOT_FOU)o(ND)20 b Fr(if)27 b(in)f(the)h(\014le)390 +4966 y(there)35 b(is)g(an)g(iden)m(ti\014er)g(that)g(is)g(not)g +(de\014ned,)g Fk(ASN1_NAME_TOO_LONG)30 b Fr(if)35 b(in)g(the)g(\014le)g +(there)g(is)390 5075 y(an)30 b(iden)m(ti\014er)h(whith)e(more)i(than)f +Fk(ASN1_MAX_NAME_SIZE)25 b Fr(c)m(haracters.)150 5330 +y Fq(4.2)68 b(ASN.1)45 b(\014eld)g(functions)p eop end +%%Page: 9 12 +TeXDict begin 9 11 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2359 b(9)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(arra)m(y2tree)3350 517 y Fr([F)-8 +b(unction])-3599 b Fi(int)53 b(asn1_array2tree)d Fh(\()p +Fg(const)31 b(asn1)p 1645 517 28 4 v 41 w(static)p 1902 +517 V 41 w(no)s(de)f(*)h Ff(array)p Fg(,)h(asn1)p 2733 +517 V 40 w(no)s(de)e(*)565 626 y Ff(definitions)p Fg(,)k(c)m(har)d(*)g +Ff(errorDescription)p Fh(\))390 736 y Fg(arra)m(y)8 b +Fr(:)41 b(sp)s(ecify)30 b(the)h(arra)m(y)f(that)h(con)m(tains)h(ASN.1)f +(declarations)390 891 y Fg(de\014nitions)t Fr(:)44 b(return)31 +b(the)h(p)s(oin)m(ter)h(to)g(the)f(structure)g(created)h(b)m(y)f(*ARRA) +-8 b(Y)34 b(ASN.1)f(declara-)390 1001 y(tions)390 1156 +y Fg(errorDescription)p Fr(:)41 b(return)30 b(the)g(error)g +(description.)390 1312 y(Creates)38 b(the)g(structures)f(needed)h(to)g +(manage)h(the)f(ASN.1)g(de\014nitions.)62 b Fk(array)36 +b Fr(is)i(a)g(v)m(ector)390 1421 y(created)31 b(b)m(y)g +Fk(asn1_parser2array\(\))25 b Fr(.)390 1577 y Fe(Returns:)37 +b Fk(ASN1_SUCCESS)20 b Fr(if)k(structure)f(w)m(as)h(created)h +(correctly)-8 b(,)27 b Fk(ASN1_ELEMENT_NOT_EMPTY)390 +1686 y Fr(if)34 b(*)g Fk(definitions)d Fr(not)j(NULL,)g +Fk(ASN1_IDENTIFIER_NOT_FOUND)27 b Fr(if)34 b(in)g(the)g(\014le)g(there) +g(is)g(an)390 1796 y(iden)m(ti\014er)k(that)h(is)f(not)h(de\014ned)e +(\(see)i Fk(errorDescription)34 b Fr(for)k(more)g(information\),)j +Fk(ASN1_)390 1906 y(ARRAY_ERROR)27 b Fr(if)k(the)f(arra)m(y)h(p)s(oin)m +(ted)f(b)m(y)h Fk(array)e Fr(is)h(wrong.)150 2126 y Fj(asn1)p +396 2126 37 5 v 55 w(delete)p 769 2126 V 54 w(structure)3350 +2344 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_delete_structure)f +Fh(\()p Fg(asn1)p 1721 2344 28 4 v 41 w(no)s(de)29 b(*)i +Ff(structure)p Fh(\))390 2453 y Fg(structure)5 b Fr(:)40 +b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(that)h(y)m(ou)g(w)m(an)m(t) +g(to)g(delete.)390 2609 y(Deletes)h(the)f(structure)f(*)h +Fk(structure)c Fr(.)41 b(A)m(t)31 b(the)g(end,)f(*)h +Fk(structure)d Fr(is)i(set)h(to)g(NULL.)390 2764 y Fe(Returns:)41 +b Fk(ASN1_SUCCESS)27 b Fr(if)k(successful,)g Fk(ASN1_ELEMENT_NOT_FOUND) +25 b Fr(if)30 b(*)h Fk(structure)e Fr(w)m(as)390 2874 +y(NULL.)150 3094 y Fj(asn1)p 396 3094 37 5 v 55 w(delete)p +769 3094 V 54 w(structure2)3350 3312 y Fr([F)-8 b(unction])-3599 +b Fi(int)53 b(asn1_delete_structure)q(2)e Fh(\()p Fg(asn1)p +1773 3312 28 4 v 41 w(no)s(de)30 b(*)g Ff(structure)p +Fg(,)k(unsigned)29 b(in)m(t)565 3421 y Ff(flags)p Fh(\))390 +3531 y Fg(structure)5 b Fr(:)40 b(p)s(oin)m(ter)31 b(to)g(the)f +(structure)g(that)h(y)m(ou)g(w)m(an)m(t)g(to)g(delete.)390 +3686 y Fg(\015ags)t Fr(:)41 b(additional)31 b(\015ags)g(\(see)g +Fk(ASN1_DELETE_FLAG)26 b Fr(\))390 3842 y(Deletes)32 +b(the)f(structure)f(*)h Fk(structure)c Fr(.)41 b(A)m(t)31 +b(the)g(end,)f(*)h Fk(structure)d Fr(is)i(set)h(to)g(NULL.)390 +3997 y Fe(Returns:)41 b Fk(ASN1_SUCCESS)27 b Fr(if)k(successful,)g +Fk(ASN1_ELEMENT_NOT_FOUND)25 b Fr(if)30 b(*)h Fk(structure)e +Fr(w)m(as)390 4107 y(NULL.)150 4327 y Fj(asn1)p 396 4327 +37 5 v 55 w(delete)p 769 4327 V 54 w(elemen)m(t)3350 +4545 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_delete_element)e +Fh(\()p Fg(asn1)p 1616 4545 28 4 v 41 w(no)s(de)30 b +Ff(structure)p Fg(,)j(const)e(c)m(har)g(*)565 4654 y +Ff(element_name)p Fh(\))390 4764 y Fg(structure)5 b Fr(:)40 +b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(that)h(con)m(tains)h(the)e +(elemen)m(t)i(y)m(ou)f(w)m(an)m(t)g(to)g(delete.)390 +4919 y Fg(elemen)m(t)p 700 4919 V 42 w(name)5 b Fr(:)40 +b(elemen)m(t's)32 b(name)f(y)m(ou)g(w)m(an)m(t)g(to)g(delete.)390 +5075 y(Deletes)h(the)f(elemen)m(t)h(named)e(*)h Fk(element_name)c +Fr(inside)j(*)g Fk(structure)e Fr(.)390 5230 y Fe(Returns:)37 +b Fk(ASN1_SUCCESS)19 b Fr(if)k(successful,)i Fk(ASN1_ELEMENT_NOT_FOUND) +17 b Fr(if)23 b(the)g Fk(element_name)390 5340 y Fr(w)m(as)31 +b(not)f(found.)p eop end +%%Page: 10 13 +TeXDict begin 10 12 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(10)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(create)p 776 299 V 53 w(elemen)m(t)3350 +492 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_create_element)e +Fh(\()p Fg(asn1)p 1616 492 28 4 v 41 w(no)s(de)30 b Ff(definitions)p +Fg(,)k(const)d(c)m(har)f(*)565 602 y Ff(source_name)p +Fg(,)k(asn1)p 1379 602 V 40 w(no)s(de)c(*)h Ff(element)p +Fh(\))390 712 y Fg(de\014nitions)t Fr(:)40 b(p)s(oin)m(ter)30 +b(to)h(the)g(structure)f(returned)f(b)m(y)h Fk(")p Fr(parser)p +2633 712 V 40 w(asn1)p Fk(")g Fr(function)390 845 y Fg(source)p +644 845 V 40 w(name)5 b Fr(:)39 b(the)25 b(name)g(of)g(the)h(t)m(yp)s +(e)f(of)h(the)f(new)g(structure)f(\(m)m(ust)i(b)s(e)e(inside)h(p)p +3296 845 V 40 w(structure\).)390 977 y Fg(elemen)m(t)r +Fr(:)42 b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(created.)390 +1110 y(Creates)h(a)g(structure)f(of)g(t)m(yp)s(e)h Fk(source_name)c +Fr(.)41 b(Example)30 b(using)g Fk(")p Fr(pkix.asn)p Fk(")p +Fr(:)390 1243 y(rc)g(=)g(asn1)p 780 1243 V 41 w(create)p +1057 1243 V 41 w(elemen)m(t\(cert)p 1588 1243 V 43 w(def,)g +Fk(")p Fr(PKIX1.Certi\014cate)p Fk(")p Fr(,)i(certptr\);)390 +1376 y Fe(Returns:)53 b Fk(ASN1_SUCCESS)34 b Fr(if)i(creation)i(OK,)f +Fk(ASN1_ELEMENT_NOT_FOUND)30 b Fr(if)37 b Fk(source_name)390 +1486 y Fr(is)30 b(not)h(kno)m(wn.)150 1682 y Fj(asn1)p +396 1682 37 5 v 55 w(prin)m(t)p 716 1682 V 54 w(structure)3350 +1875 y Fr([F)-8 b(unction])-3599 b Fi(void)54 b(asn1_print_structure)d +Fh(\()p Fg(FILE)31 b(*)f Ff(out)p Fg(,)i(asn1)p 2251 +1875 28 4 v 40 w(no)s(de)e Ff(structure)p Fg(,)565 1985 +y(const)h(c)m(har)g(*)f Ff(name)p Fg(,)i(in)m(t)f Ff(mode)p +Fh(\))390 2095 y Fg(out)r Fr(:)41 b(p)s(oin)m(ter)30 +b(to)h(the)g(output)f(\014le)g(\(e.g.)43 b(stdout\).)390 +2228 y Fg(structure)5 b Fr(:)40 b(p)s(oin)m(ter)31 b(to)g(the)f +(structure)g(that)h(y)m(ou)g(w)m(an)m(t)g(to)g(visit.)390 +2360 y Fg(name)5 b Fr(:)41 b(an)30 b(elemen)m(t)i(of)f(the)f(structure) +390 2493 y Fg(mo)s(de)5 b Fr(:)40 b(sp)s(ecify)30 b(ho)m(w)h(m)m(uc)m +(h)f(of)h(the)f(structure)g(to)h(prin)m(t,)f(can)h(b)s(e)f +Fk(ASN1_PRINT_NAME)c Fr(,)k Fk(ASN1_)390 2603 y(PRINT_NAME_TYPE)c +Fr(,)31 b Fk(ASN1_PRINT_NAME_TYPE_VA)o(LUE)24 b Fr(,)31 +b(or)f Fk(ASN1_PRINT_ALL)c Fr(.)390 2736 y(Prin)m(ts)33 +b(on)g(the)g Fk(out)f Fr(\014le)h(descriptor)f(the)h(structure's)g +(tree)h(starting)f(from)g(the)g Fk(name)e Fr(elemen)m(t)390 +2845 y(inside)f(the)h(structure)f Fk(structure)d Fr(.)150 +3042 y Fj(asn1)p 396 3042 37 5 v 55 w(n)m(um)m(b)s(er)p +860 3042 V 54 w(of)p 1012 3042 V 55 w(elemen)m(ts)3350 +3235 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_number_of_elemen)q +(ts)f Fh(\()p Fg(asn1)p 1826 3235 28 4 v 40 w(no)s(de)30 +b Ff(element)p Fg(,)j(const)e(c)m(har)f(*)565 3345 y +Ff(name)p Fg(,)i(in)m(t)f(*)g Ff(num)p Fh(\))390 3454 +y Fg(elemen)m(t)r Fr(:)42 b(p)s(oin)m(ter)31 b(to)g(the)f(ro)s(ot)h(of) +f(an)h(ASN1)f(structure.)390 3587 y Fg(name)5 b Fr(:)41 +b(the)30 b(name)h(of)f(a)h(sub-structure)e(of)i(R)m(OOT.)390 +3720 y Fg(n)m(um)p Fr(:)40 b(p)s(oin)m(ter)30 b(to)h(an)g(in)m(teger)g +(where)f(the)h(result)f(will)h(b)s(e)f(stored)390 3853 +y(Coun)m(ts)e(the)h(n)m(um)m(b)s(er)e(of)h(elemen)m(ts)i(of)f(a)f +(sub-structure)f(called)j(NAME)f(with)f(names)g(equal)h(to)390 +3963 y Fk(")p Fr(?1)p Fk(")p Fr(,)p Fk(")p Fr(?2)p Fk(")p +Fr(,)h(...)390 4096 y Fe(Returns:)36 b Fk(ASN1_SUCCESS)18 +b Fr(if)k(successful,)h Fk(ASN1_ELEMENT_NOT_FOUND)15 +b Fr(if)22 b Fk(name)e Fr(is)h(not)h(kno)m(wn,)390 4205 +y Fk(ASN1_GENERIC_ERROR)j Fr(if)31 b(p)s(oin)m(ter)f +Fk(num)g Fr(is)g Fk(NULL)f Fr(.)150 4401 y Fj(asn1)p +396 4401 37 5 v 55 w(\014nd)p 655 4401 V 54 w(structure)p +1200 4401 V 54 w(from)p 1504 4401 V 55 w(oid)3350 4595 +y Fr([F)-8 b(unction])-3599 b Fi(const)54 b(char)f(*)g +(asn1_find_structure_fr)q(om_)q(oid)f Fh(\()p Fg(asn1)p +2558 4595 28 4 v 41 w(no)s(de)565 4704 y Ff(definitions)p +Fg(,)34 b(const)d(c)m(har)g(*)f Ff(oidValue)p Fh(\))390 +4814 y Fg(de\014nitions)t Fr(:)40 b(ASN1)31 b(de\014nitions)390 +4947 y Fg(oidV)-8 b(alue)5 b Fr(:)42 b(v)-5 b(alue)31 +b(of)g(the)f(OID)g(to)i(searc)m(h)f(\(e.g.)42 b Fk(")p +Fr(1.2.3.4)p Fk(")p Fr(\).)390 5080 y(Searc)m(h)31 b(the)f(structure)g +(that)h(is)g(de\014ned)e(just)g(after)i(an)g(OID)f(de\014nition.)390 +5213 y Fe(Returns:)41 b Fk(NULL)29 b Fr(when)h Fk(oidValue)e +Fr(not)j(found,)e(otherwise)i(the)g(p)s(oin)m(ter)g(to)g(a)g(constan)m +(t)h(string)390 5322 y(that)f(con)m(tains)h(the)e(elemen)m(t)i(name)e +(de\014ned)g(just)f(after)i(the)g(OID.)p eop end +%%Page: 11 14 +TeXDict begin 11 13 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(11)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(cop)m(y)p 697 299 V 53 w(no)s(de)3350 +493 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_copy_node)d +Fh(\()p Fg(asn1)p 1355 493 28 4 v 41 w(no)s(de)29 b Ff(dst)p +Fg(,)j(const)f(c)m(har)f(*)h Ff(dst_name)p Fg(,)565 603 +y(asn1)p 748 603 V 40 w(no)s(de)f Ff(src)p Fg(,)i(const)e(c)m(har)h(*)g +Ff(src_name)p Fh(\))390 712 y Fg(dst)r Fr(:)40 b(Destination)32 +b(asn1)f(no)s(de.)390 845 y Fg(dst)p 518 845 V 40 w(name)5 +b Fr(:)41 b(Field)31 b(name)f(in)g(destination)h(no)s(de.)390 +979 y Fg(src)6 b Fr(:)40 b(Source)30 b(asn1)h(no)s(de.)390 +1112 y Fg(src)p 508 1112 V 40 w(name)5 b Fr(:)41 b(Field)31 +b(name)f(in)g(source)h(no)s(de.)390 1245 y(Create)39 +b(a)f(deep)g(cop)m(y)h(of)f(a)g(asn1)p 1591 1245 V 40 +w(no)s(de)g(v)-5 b(ariable.)64 b(That)38 b(function)g(requires)f +Fk(dst)g Fr(to)i(b)s(e)e(ex-)390 1355 y(panded)29 b(using)h +Fk(asn1_create_element\(\))25 b Fr(.)390 1488 y Fe(Returns:)40 +b Fr(Return)30 b Fk(ASN1_SUCCESS)d Fr(on)j(success.)150 +1685 y Fj(asn1)p 396 1685 37 5 v 55 w(dup)p 655 1685 +V 54 w(no)s(de)3350 1879 y Fr([F)-8 b(unction])-3599 +b Fi(asn1_node)55 b(asn1_dup_node)49 b Fh(\()p Fg(asn1)p +1616 1879 28 4 v 41 w(no)s(de)30 b Ff(src)p Fg(,)h(const)g(c)m(har)g(*) +g Ff(src_name)p Fh(\))390 1988 y Fg(src)6 b Fr(:)40 b(Source)30 +b(asn1)h(no)s(de.)390 2122 y Fg(src)p 508 2122 V 40 w(name)5 +b Fr(:)41 b(Field)31 b(name)f(in)g(source)h(no)s(de.)390 +2255 y(Create)h(a)f(deep)g(cop)m(y)h(of)g(a)f(asn1)p +1550 2255 V 40 w(no)s(de)g(v)-5 b(ariable.)44 b(This)30 +b(function)h(will)g(return)f(an)i(exact)g(cop)m(y)390 +2364 y(of)f(the)f(pro)m(vided)g(structure.)390 2498 y +Fe(Returns:)40 b Fr(Return)30 b Fk(NULL)f Fr(on)h(failure.)150 +2694 y Fj(asn1)p 396 2694 37 5 v 55 w(write)p 728 2694 +V 53 w(v)-7 b(alue)3350 2888 y Fr([F)f(unction])-3599 +b Fi(int)53 b(asn1_write_value)e Fh(\()p Fg(asn1)p 1460 +2888 28 4 v 40 w(no)s(de)30 b Ff(node_root)p Fg(,)j(const)e(c)m(har)g +(*)g Ff(name)p Fg(,)565 2998 y(const)g(v)m(oid)g(*)g +Ff(ivalue)p Fg(,)h(in)m(t)f Ff(len)p Fh(\))390 3108 y +Fg(no)s(de)p 586 3108 V 39 w(ro)s(ot)r Fr(:)41 b(p)s(oin)m(ter)31 +b(to)g(a)g(structure)390 3241 y Fg(name)5 b Fr(:)41 b(the)30 +b(name)h(of)f(the)h(elemen)m(t)h(inside)e(the)g(structure)g(that)h(y)m +(ou)g(w)m(an)m(t)g(to)g(set.)390 3374 y Fg(iv)-5 b(alue)5 +b Fr(:)45 b(v)m(ector)34 b(used)e(to)h(sp)s(ecify)f(the)g(v)-5 +b(alue)33 b(to)g(set.)47 b(If)32 b(len)g(is)h Fk(>)p +Fr(0,)g(V)-10 b(ALUE)32 b(m)m(ust)g(b)s(e)g(a)g(t)m(w)m(o's)390 +3484 y(complemen)m(t)k(form)e(in)m(teger.)56 b(if)35 +b(len=0)g(*V)-10 b(ALUE)35 b(m)m(ust)g(b)s(e)f(a)h(n)m(ull)g +(terminated)g(string)g(with)390 3593 y(an)30 b(in)m(teger)i(v)-5 +b(alue.)390 3726 y Fg(len)p Fr(:)53 b(n)m(um)m(b)s(er)35 +b(of)i(b)m(ytes)g(of)g(*v)-5 b(alue)38 b(to)f(use)f(to)h(set)h(the)e(v) +-5 b(alue:)54 b(v)-5 b(alue[0]..v)g(alue[len-1])40 b(or)d(0)g(if)390 +3836 y(v)-5 b(alue)31 b(is)f(a)h(n)m(ull)f(terminated)h(string)390 +3969 y(Set)g(the)f(v)-5 b(alue)31 b(of)g(one)f(elemen)m(t)i(inside)e(a) +h(structure.)390 4102 y(If)23 b(an)g(elemen)m(t)i(is)e(OPTIONAL)f(and)g +(y)m(ou)i(w)m(an)m(t)g(to)g(delete)g(it,)i(y)m(ou)d(m)m(ust)g(use)g +(the)h(v)-5 b(alue=NULL)390 4212 y(and)30 b(len=0.)41 +b(Using)30 b Fk(")p Fr(pkix.asn)p Fk(")p Fr(:)390 4345 +y(result=asn1)p 867 4345 V 40 w(write)p 1109 4345 V 40 +w(v)-5 b(alue\(cert,)32 b Fk(")p Fr(tbsCerti\014cate.issuerUniqueID)p +Fk(")p Fr(,)f(NULL,)g(0\);)390 4478 y(Description)g(for)f(eac)m(h)i(t)m +(yp)s(e:)390 4612 y Fe(INTEGER:)f Fr(V)-10 b(ALUE)30 +b(m)m(ust)g(con)m(tain)i(a)f(t)m(w)m(o's)h(complemen)m(t)f(form)f(in)m +(teger.)390 4745 y(v)-5 b(alue[0]=0xFF)52 b(,)e(len=1)g(-)p +Fk(>)g Fr(in)m(teger=-1.)101 b(v)-5 b(alue[0]=0xFF)52 +b(v)-5 b(alue[1]=0xFF)52 b(,)e(len=2)g(-)p Fk(>)390 4854 +y Fr(in)m(teger=-1.)85 b(v)-5 b(alue[0]=0x01)46 b(,)i(len=1)d(-)p +Fk(>)f Fr(in)m(teger=)i(1.)83 b(v)-5 b(alue[0]=0x00)47 +b(v)-5 b(alue[1]=0x01)47 b(,)390 4964 y(len=2)31 b(-)p +Fk(>)f Fr(in)m(teger=)h(1.)42 b(v)-5 b(alue=)p Fk(")p +Fr(123)p Fk(")31 b Fr(,)f(len=0)h(-)p Fk(>)f Fr(in)m(teger=)i(123.)390 +5097 y Fe(ENUMERA)-8 b(TED:)30 b Fr(As)g(INTEGER)g(\(but)g(only)h(with) +f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 5230 y +Fe(BOOLEAN:)g Fr(V)-10 b(ALUE)35 b(m)m(ust)f(b)s(e)f(the)i(n)m(ull)f +(terminated)g(string)h Fk(")p Fr(TR)m(UE)p Fk(")e Fr(or)h +Fk(")p Fr(F)-10 b(ALSE)p Fk(")34 b Fr(and)390 5340 y(LEN)c(!=)g(0.)p +eop end +%%Page: 12 15 +TeXDict begin 12 14 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(12)390 299 y(v)-5 +b(alue=)p Fk(")p Fr(TR)m(UE)p Fk(")88 b Fr(,)103 b(len=1)89 +b(-)p Fk(>)g Fr(b)s(o)s(olean=TR)m(UE.)f(v)-5 b(alue=)p +Fk(")p Fr(F)-10 b(ALSE)p Fk(")88 b Fr(,)103 b(len=1)89 +b(-)p Fk(>)390 408 y Fr(b)s(o)s(olean=F)-10 b(ALSE.)390 +538 y(OBJECT)26 b(IDENTIFIER:)h(V)-10 b(ALUE)27 b(m)m(ust)g(b)s(e)g(a)g +(n)m(ull)g(terminated)h(string)f(with)g(eac)m(h)h(n)m(um)m(b)s(er)390 +648 y(separated)j(b)m(y)f(a)h(dot)f(\(e.g.)43 b Fk(")p +Fr(1.2.3.543.1)p Fk(")p Fr(\).)h(LEN)30 b(!=)h(0.)390 +777 y(v)-5 b(alue=)p Fk(")p Fr(1)31 b(2)f(840)i(10040)h(4)d(3)p +Fk(")h Fr(,)g(len=1)f(-)p Fk(>)g Fr(OID=dsa-with-sha.)390 +907 y Fe(UTCTime:)84 b Fr(V)-10 b(ALUE)53 b(m)m(ust)f(b)s(e)f(a)i(n)m +(ull)f(terminated)g(string)g(in)g(one)h(of)f(these)g(formats:)390 +1017 y Fk(")p Fr(YYMMDDhhmmssZ)p Fk(")p Fr(,)118 b Fk(")p +Fr(YYMMDDhhmmssZ)p Fk(")p Fr(,)g Fk(")p Fr(YYMMDDhhmmss)p +Fk(+)p Fr(hh'mm')p Fk(")p Fr(,)390 1126 y Fk(")p Fr +(YYMMDDhhmmss-hh'mm')p Fk(")p Fr(,)40 b Fk(")p Fr(YYMMDDhhmm)p +Fk(+)p Fr(hh'mm')p Fk(")p Fr(,)g(or)f Fk(")p Fr(YYMMDDhhmm-)390 +1236 y(hh'mm')p Fk(")p Fr(.)g(LEN)31 b(!=)f(0.)390 1365 +y(v)-5 b(alue=)p Fk(")p Fr(9801011200Z)p Fk(")43 b Fr(,)f(len=1)e(-)p +Fk(>)f Fr(time=Jann)m(uary)g(1st,)k(1998)e(at)f(12h)g(00m)g(Green)m +(wic)m(h)390 1475 y(Mean)31 b(Time)390 1605 y Fe(GeneralizedTime:)94 +b Fr(V)-10 b(ALUE)56 b(m)m(ust)f(b)s(e)h(in)f(one)h(of)g(this)g +(format:)92 b Fk(")p Fr(YYYYMMDDhh-)390 1714 y(mmss.sZ)p +Fk(")p Fr(,)185 b Fk(")p Fr(YYYYMMDDhhmmss.sZ)p Fk(")p +Fr(,)h Fk(")p Fr(YYYYMMDDhhmmss.s)p Fk(+)p Fr(hh'mm')p +Fk(")p Fr(,)390 1824 y Fk(")p Fr(YYYYMMDDhhmmss.s-hh'mm')p +Fk(")p Fr(,)279 b Fk(")p Fr(YYYYMMDDhhmm)p Fk(+)p Fr(hh'mm')p +Fk(")p Fr(,)g(or)390 1933 y Fk(")p Fr(YYYYMMDDhhmm-hh'mm')p +Fk(")36 b Fr(where)h(ss.s)f(indicates)i(the)f(seconds)f(with)h(an)m(y)g +(precision)390 2043 y(lik)m(e)32 b Fk(")p Fr(10.1)p Fk(")f +Fr(or)f Fk(")p Fr(01.02)p Fk(")p Fr(.)43 b(LEN)30 b(!=)g(0)390 +2172 y(v)-5 b(alue=)p Fk(")p Fr(2001010112001.1)q(2-0)q(70)q(0)p +Fk(")50 b Fr(,)e(len=1)c(-)p Fk(>)h Fr(time=Jann)m(uary)e(1st,)49 +b(2001)d(at)f(12h)f(00m)390 2282 y(01.12s)32 b(P)m(aci\014c)g(Da)m +(yligh)m(t)h(Time)390 2412 y(OCTET)22 b(STRING:)h(V)-10 +b(ALUE)23 b(con)m(tains)h(the)g(o)s(ctet)g(string)g(and)e(LEN)h(is)h +(the)f(n)m(um)m(b)s(er)f(of)h(o)s(ctets.)390 2541 y(v)-5 +b(alue=)p Fk(")p Fr($)p Fk(\\)p Fr(bac)m(kslash$x01$)p +Fk(\\)p Fr(bac)m(kslash$x02$)p Fk(\\)p Fr(bac)m(kslash$x03)q +Fk(")62 b Fr(,)g(len=3)57 b(-)p Fk(>)f Fr(three)g(b)m(ytes)390 +2651 y(o)s(ctet)32 b(string)390 2781 y Fe(GeneralString:)42 +b Fr(V)-10 b(ALUE)30 b(con)m(tains)h(the)g(generalstring)g(and)f(LEN)g +(is)g(the)g(n)m(um)m(b)s(er)f(of)h(o)s(ctets.)390 2910 +y(v)-5 b(alue=)p Fk(")p Fr($)p Fk(\\)p Fr(bac)m(kslash$x01$)p +Fk(\\)p Fr(bac)m(kslash$x02$)p Fk(\\)p Fr(bac)m(kslash$x03)q +Fk(")62 b Fr(,)g(len=3)57 b(-)p Fk(>)f Fr(three)g(b)m(ytes)390 +3020 y(generalstring)390 3149 y(BIT)39 b(STRING:)g(V)-10 +b(ALUE)39 b(con)m(tains)h(the)g(bit)f(string)g(organized)h(b)m(y)f(b)m +(ytes)h(and)f(LEN)g(is)g(the)390 3259 y(n)m(um)m(b)s(er)29 +b(of)i(bits.)390 3389 y(v)-5 b(alue=)p Fk(")p Fr($)p +Fk(\\)p Fr(bac)m(kslash$xCF)p Fk(")31 b Fr(,)g(len=6)g(-)p +Fk(>)f Fr(bit)g(string=)p Fk(")p Fr(110011)p Fk(")j Fr(\(six)d(bits\)) +390 3518 y Fe(CHOICE:)f Fr(if)g(NAME)g(indicates)h(a)g(c)m(hoice)g(t)m +(yp)s(e,)g(V)-10 b(ALUE)29 b(m)m(ust)g(sp)s(ecify)g(one)g(of)g(the)h +(alterna-)390 3628 y(tiv)m(es)i(with)e(a)g(n)m(ull)h(terminated)g +(string.)40 b(LEN)31 b(!=)f(0.)41 b(Using)30 b Fk(")p +Fr(pkix.asn)p Fk("\\)p Fr(:)390 3757 y(result=asn1)p +867 3757 28 4 v 40 w(write)p 1109 3757 V 40 w(v)-5 b(alue\(cert,)74 +b Fk(")p Fr(certi\014cate1.tbsCerti\014cate.sub)5 b(ject)p +Fk(")p Fr(,)76 b Fk(")p Fr(rdnSequence)p Fk(")p Fr(,)390 +3867 y(1\);)390 3997 y Fe(ANY:)30 b Fr(V)-10 b(ALUE)31 +b(indicates)g(the)f(der)g(enco)s(ding)h(of)f(a)h(structure.)40 +b(LEN)30 b(!=)h(0.)390 4126 y(SEQUENCE)i(OF:)h(V)-10 +b(ALUE)34 b(m)m(ust)g(b)s(e)g(the)g(n)m(ull)g(terminated)h(string)f +Fk(")p Fr(NEW)p Fk(")g Fr(and)f(LEN)h(!=)390 4236 y(0.)46 +b(With)32 b(this)g(instruction)g(another)g(elemen)m(t)i(is)e(app)s +(ended)e(in)h(the)i(sequence.)45 b(The)32 b(name)g(of)390 +4345 y(this)e(elemen)m(t)i(will)f(b)s(e)f Fk(")p Fr(?1)p +Fk(")g Fr(if)g(it's)h(the)g(\014rst)e(one,)i Fk(")p Fr(?2)p +Fk(")f Fr(for)g(the)h(second)f(and)g(so)h(on.)390 4475 +y(Using)g Fk(")p Fr(pkix.asn)p Fk("\\)p Fr(:)390 4605 +y(result=asn1)p 867 4605 V 40 w(write)p 1109 4605 V 40 +w(v)-5 b(alue\(cert,)241 b Fk(")p Fr +(certi\014cate1.tbsCerti\014cate.sub)5 b(ject.rdnSequence)p +Fk(")p Fr(,)390 4714 y Fk(")p Fr(NEW)p Fk(")p Fr(,)30 +b(1\);)390 4844 y(SET)f(OF:)i(the)g(same)f(as)h(SEQUENCE)e(OF.)i(Using) +f Fk(")p Fr(pkix.asn)p Fk(")p Fr(:)390 4973 y(result=asn1)p +867 4973 V 40 w(write)p 1109 4973 V 40 w(v)-5 b(alue\(cert,)25 +b Fk(")p Fr(tbsCerti\014cate.sub)5 b(ject.rdnSequence.?LAST)p +Fk(")p Fr(,)22 b Fk(")p Fr(NEW)p Fk(")p Fr(,)390 5083 +y(1\);)390 5213 y Fe(Returns:)38 b Fk(ASN1_SUCCESS)21 +b Fr(if)k(the)g(v)-5 b(alue)26 b(w)m(as)f(set,)i Fk +(ASN1_ELEMENT_NOT_FOUND)19 b Fr(if)25 b Fk(name)f Fr(is)h(not)390 +5322 y(a)31 b(v)-5 b(alid)30 b(elemen)m(t,)j(and)c Fk +(ASN1_VALUE_NOT_VALID)c Fr(if)31 b Fk(ivalue)d Fr(has)i(a)h(wrong)f +(format.)p eop end +%%Page: 13 16 +TeXDict begin 13 15 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(13)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(read)p 685 299 V 54 w(v)-7 b(alue)3350 +493 y Fr([F)f(unction])-3599 b Fi(int)53 b(asn1_read_value)d +Fh(\()p Fg(asn1)p 1407 493 28 4 v 41 w(no)s(de)30 b Ff(root)p +Fg(,)h(const)g(c)m(har)g(*)g Ff(name)p Fg(,)g(v)m(oid)g(*)565 +602 y Ff(ivalue)p Fg(,)h(in)m(t)f(*)g Ff(len)p Fh(\))390 +712 y Fg(ro)s(ot)r Fr(:)41 b(p)s(oin)m(ter)30 b(to)i(a)e(structure.)390 +845 y Fg(name)5 b Fr(:)41 b(the)30 b(name)h(of)f(the)h(elemen)m(t)h +(inside)e(a)h(structure)f(that)h(y)m(ou)f(w)m(an)m(t)h(to)h(read.)390 +978 y Fg(iv)-5 b(alue)5 b Fr(:)45 b(v)m(ector)34 b(that)e(will)h(con)m +(tain)g(the)g(elemen)m(t's)g(con)m(ten)m(t,)i(m)m(ust)d(b)s(e)g(a)g(p)s +(oin)m(ter)g(to)h(memory)390 1088 y(cells)e(already)g(allo)s(cated)i +(\(ma)m(y)e(b)s(e)f Fk(NULL)f Fr(\).)390 1221 y Fg(len)p +Fr(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*v)-5 +b(alue:)41 b(v)-5 b(alue[0]..v)g(alue[len-1].)45 b(Initialy)31 +b(holds)f(the)h(sizeof)g(v)-5 b(alue.)390 1354 y(Returns)25 +b(the)h(v)-5 b(alue)27 b(of)f(one)g(elemen)m(t)i(inside)d(a)i +(structure.)39 b(If)25 b(an)h(elemen)m(t)i(is)e(OPTIONAL)f(and)390 +1463 y(this)j(returns)f Fk(ASN1_ELEMENT_NOT_FOUND)22 +b Fr(,)29 b(it)f(means)g(that)h(this)f(elemen)m(t)i(w)m(asn't)e(presen) +m(t)g(in)390 1573 y(the)j(der)e(enco)s(ding)i(that)g(created)g(the)f +(structure.)41 b(The)29 b(\014rst)h(elemen)m(t)i(of)e(a)h(SEQUENCE)p +3587 1573 V 39 w(OF)390 1683 y(or)c(SET)p 683 1683 V +39 w(OF)g(is)g(named)f Fk(")p Fr(?1)p Fk(")p Fr(.)40 +b(The)26 b(second)h(one)g Fk(")p Fr(?2)p Fk(")g Fr(and)f(so)h(on.)40 +b(If)26 b(the)h Fk(root)f Fr(pro)m(vided)h(is)g(a)390 +1792 y(no)s(de)c(to)i(sp)s(eci\014c)f(sequence)h(elemen)m(t,)i(then)d +(the)g(k)m(eyw)m(ord)h Fk(")p Fr(?CURRENT)p Fk(")e Fr(is)h(also)h +(acceptable)390 1902 y(and)30 b(indicates)h(the)g(curren)m(t)f +(sequence)h(elemen)m(t)g(of)g(this)f(no)s(de.)390 2035 +y(Note)i(that)f(there)g(can)g(b)s(e)f(v)-5 b(alid)31 +b(v)-5 b(alues)31 b(with)f(length)h(zero.)42 b(In)30 +b(these)h(case)h(this)e(function)h(will)390 2144 y(succeed)g(and)f +Fk(len)f Fr(will)i(b)s(e)e(zero.)390 2277 y Fe(INTEGER:)i +Fr(V)-10 b(ALUE)30 b(will)h(con)m(tain)h(a)e(t)m(w)m(o's)i(complemen)m +(t)g(form)e(in)m(teger.)390 2410 y(in)m(teger=-1)i(-)p +Fk(>)f Fr(v)-5 b(alue[0]=0xFF)32 b(,)f(len=1.)41 b(in)m(teger=1)32 +b(-)p Fk(>)e Fr(v)-5 b(alue[0]=0x01)33 b(,)d(len=1.)390 +2544 y Fe(ENUMERA)-8 b(TED:)30 b Fr(As)g(INTEGER)g(\(but)g(only)h(with) +f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 2677 y +Fe(BOOLEAN:)38 b Fr(V)-10 b(ALUE)39 b(will)h(b)s(e)e(the)h(n)m(ull)g +(terminated)h(string)f Fk(")p Fr(TR)m(UE)p Fk(")f Fr(or)h +Fk(")p Fr(F)-10 b(ALSE)p Fk(")39 b Fr(and)390 2786 y(LEN=5)30 +b(or)h(LEN=6.)390 2919 y(OBJECT)g(IDENTIFIER:)h(V)-10 +b(ALUE)32 b(will)g(b)s(e)g(a)g(n)m(ull)g(terminated)g(string)g(with)g +(eac)m(h)h(n)m(um)m(b)s(er)390 3029 y(separated)e(b)m(y)f(a)h(dot)f +(\(i.e.)42 b Fk(")p Fr(1.2.3.543.1)p Fk(")p Fr(\).)390 +3162 y(LEN)30 b(=)g(strlen\(V)-10 b(ALUE\))p Fk(+)p Fr(1)390 +3295 y Fe(UTCTime:)41 b Fr(V)-10 b(ALUE)30 b(will)h(b)s(e)e(a)i(n)m +(ull)f(terminated)h(string)f(in)g(one)g(of)h(these)f(formats:)41 +b Fk(")p Fr(YYM-)390 3405 y(MDDhhmmss)p Fk(+)p Fr(hh'mm')p +Fk(")28 b Fr(or)j Fk(")p Fr(YYMMDDhhmmss-hh'mm')p Fk(")p +Fr(.)39 b(LEN=strlen\(V)-10 b(ALUE\))p Fk(+)p Fr(1.)390 +3538 y Fe(GeneralizedTime:)48 b Fr(V)-10 b(ALUE)33 b(will)g(b)s(e)g(a)g +(n)m(ull)g(terminated)g(string)g(in)g(the)g(same)g(format)h(used)390 +3647 y(to)d(set)g(the)g(v)-5 b(alue.)390 3780 y(OCTET)26 +b(STRING:)h(V)-10 b(ALUE)27 b(will)h(con)m(tain)h(the)f(o)s(ctet)h +(string)e(and)g(LEN)g(will)h(b)s(e)f(the)g(n)m(um)m(b)s(er)390 +3890 y(of)k(o)s(ctets.)390 4023 y Fe(GeneralString:)51 +b Fr(V)-10 b(ALUE)34 b(will)i(con)m(tain)g(the)f(generalstring)g(and)g +(LEN)f(will)h(b)s(e)f(the)h(n)m(um)m(b)s(er)390 4133 +y(of)c(o)s(ctets.)390 4266 y(BIT)j(STRING:)h(V)-10 b(ALUE)34 +b(will)h(con)m(tain)h(the)f(bit)g(string)f(organized)i(b)m(y)e(b)m +(ytes)h(and)f(LEN)h(will)390 4375 y(b)s(e)30 b(the)g(n)m(um)m(b)s(er)f +(of)i(bits.)390 4508 y Fe(CHOICE:)j Fr(If)f(NAME)i(indicates)g(a)g(c)m +(hoice)h(t)m(yp)s(e,)f(V)-10 b(ALUE)34 b(will)h(sp)s(ecify)f(the)g +(alternativ)m(e)i(se-)390 4618 y(lected.)390 4751 y Fe(ANY:)h +Fr(If)f(NAME)i(indicates)g(an)f(an)m(y)g(t)m(yp)s(e,)i(V)-10 +b(ALUE)37 b(will)g(indicate)h(the)g(DER)f(enco)s(ding)g(of)390 +4860 y(the)31 b(structure)e(actually)j(used.)390 4994 +y Fe(Returns:)64 b Fk(ASN1_SUCCESS)38 b Fr(if)k(v)-5 +b(alue)42 b(is)g(returned,)i Fk(ASN1_ELEMENT_NOT_FOUND)36 +b Fr(if)42 b Fk(name)f Fr(is)390 5103 y(not)33 b(a)g(v)-5 +b(alid)34 b(elemen)m(t,)h Fk(ASN1_VALUE_NOT_FOUND)27 +b Fr(if)33 b(there)g(isn't)g(an)m(y)g(v)-5 b(alue)34 +b(for)e(the)h(elemen)m(t)390 5213 y(selected,)28 b(and)d +Fk(ASN1_MEM_ERROR)c Fr(if)26 b(The)f(v)-5 b(alue)26 b(v)m(ector)h +(isn't)e(big)h(enough)f(to)h(store)g(the)g(result,)390 +5322 y(and)k(in)g(this)g(case)i Fk(len)d Fr(will)i(con)m(tain)g(the)g +(n)m(um)m(b)s(er)e(of)i(b)m(ytes)f(needed.)p eop end +%%Page: 14 17 +TeXDict begin 14 16 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(14)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(read)p 685 299 V 54 w(v)-7 b(alue)p +1015 299 V 53 w(t)m(yp)s(e)3350 481 y Fr([F)f(unction])-3599 +b Fi(int)53 b(asn1_read_value_type)f Fh(\()p Fg(asn1)p +1669 481 28 4 v 40 w(no)s(de)29 b Ff(root)p Fg(,)i(const)e(c)m(har)h(*) +f Ff(name)p Fg(,)i(v)m(oid)f(*)565 590 y Ff(ivalue)p +Fg(,)i(in)m(t)f(*)g Ff(len)p Fg(,)h(unsigned)d(in)m(t)i(*)g +Ff(etype)p Fh(\))390 700 y Fg(ro)s(ot)r Fr(:)41 b(p)s(oin)m(ter)30 +b(to)i(a)e(structure.)390 827 y Fg(name)5 b Fr(:)41 b(the)30 +b(name)h(of)f(the)h(elemen)m(t)h(inside)e(a)h(structure)f(that)h(y)m +(ou)f(w)m(an)m(t)h(to)h(read.)390 954 y Fg(iv)-5 b(alue)5 +b Fr(:)45 b(v)m(ector)34 b(that)e(will)h(con)m(tain)g(the)g(elemen)m +(t's)g(con)m(ten)m(t,)i(m)m(ust)d(b)s(e)g(a)g(p)s(oin)m(ter)g(to)h +(memory)390 1063 y(cells)e(already)g(allo)s(cated)i(\(ma)m(y)e(b)s(e)f +Fk(NULL)f Fr(\).)390 1190 y Fg(len)p Fr(:)41 b(n)m(um)m(b)s(er)29 +b(of)h(b)m(ytes)h(of)g(*v)-5 b(alue:)41 b(v)-5 b(alue[0]..v)g +(alue[len-1].)45 b(Initialy)31 b(holds)f(the)h(sizeof)g(v)-5 +b(alue.)390 1317 y Fg(et)m(yp)s(e)5 b Fr(:)41 b(The)30 +b(t)m(yp)s(e)h(of)f(the)h(v)-5 b(alue)31 b(read)f(\(ASN1)p +2037 1317 V 41 w(ETYPE\))390 1445 y(Returns)k(the)g(t)m(yp)s(e)h(and)f +(v)-5 b(alue)35 b(of)f(one)h(elemen)m(t)h(inside)e(a)h(structure.)52 +b(If)34 b(an)h(elemen)m(t)h(is)e(OP-)390 1554 y(TIONAL)41 +b(and)g(this)g(returns)f Fk(ASN1_ELEMENT_NOT_FOUND)c +Fr(,)44 b(it)e(means)g(that)g(this)f(elemen)m(t)390 1664 +y(w)m(asn't)36 b(presen)m(t)f(in)h(the)f(der)g(enco)s(ding)g(that)i +(created)f(the)g(structure.)55 b(The)35 b(\014rst)g(elemen)m(t)i(of)390 +1773 y(a)e(SEQUENCE)p 986 1773 V 39 w(OF)g(or)g(SET)p +1485 1773 V 39 w(OF)f(is)h(named)g Fk(")p Fr(?1)p Fk(")p +Fr(.)53 b(The)35 b(second)g(one)g Fk(")p Fr(?2)p Fk(")f +Fr(and)g(so)h(on.)54 b(If)390 1883 y(the)31 b Fk(root)g +Fr(pro)m(vided)f(is)i(a)f(no)s(de)g(to)h(sp)s(eci\014c)f(sequence)h +(elemen)m(t,)h(then)e(the)h(k)m(eyw)m(ord)f Fk(")p Fr(?CUR-)390 +1992 y(RENT)p Fk(")f Fr(is)g(also)h(acceptable)i(and)d(indicates)h(the) +f(curren)m(t)h(sequence)f(elemen)m(t)i(of)f(this)f(no)s(de.)390 +2119 y(Note)i(that)f(there)g(can)g(b)s(e)f(v)-5 b(alid)31 +b(v)-5 b(alues)31 b(with)f(length)h(zero.)42 b(In)30 +b(these)h(case)h(this)e(function)h(will)390 2229 y(succeed)g(and)f +Fk(len)f Fr(will)i(b)s(e)e(zero.)390 2356 y Fe(INTEGER:)i +Fr(V)-10 b(ALUE)30 b(will)h(con)m(tain)h(a)e(t)m(w)m(o's)i(complemen)m +(t)g(form)e(in)m(teger.)390 2483 y(in)m(teger=-1)i(-)p +Fk(>)f Fr(v)-5 b(alue[0]=0xFF)32 b(,)f(len=1.)41 b(in)m(teger=1)32 +b(-)p Fk(>)e Fr(v)-5 b(alue[0]=0x01)33 b(,)d(len=1.)390 +2610 y Fe(ENUMERA)-8 b(TED:)30 b Fr(As)g(INTEGER)g(\(but)g(only)h(with) +f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 2737 y +Fe(BOOLEAN:)38 b Fr(V)-10 b(ALUE)39 b(will)h(b)s(e)e(the)h(n)m(ull)g +(terminated)h(string)f Fk(")p Fr(TR)m(UE)p Fk(")f Fr(or)h +Fk(")p Fr(F)-10 b(ALSE)p Fk(")39 b Fr(and)390 2847 y(LEN=5)30 +b(or)h(LEN=6.)390 2974 y(OBJECT)g(IDENTIFIER:)h(V)-10 +b(ALUE)32 b(will)g(b)s(e)g(a)g(n)m(ull)g(terminated)g(string)g(with)g +(eac)m(h)h(n)m(um)m(b)s(er)390 3083 y(separated)e(b)m(y)f(a)h(dot)f +(\(i.e.)42 b Fk(")p Fr(1.2.3.543.1)p Fk(")p Fr(\).)390 +3210 y(LEN)30 b(=)g(strlen\(V)-10 b(ALUE\))p Fk(+)p Fr(1)390 +3337 y Fe(UTCTime:)41 b Fr(V)-10 b(ALUE)30 b(will)h(b)s(e)e(a)i(n)m +(ull)f(terminated)h(string)f(in)g(one)g(of)h(these)f(formats:)41 +b Fk(")p Fr(YYM-)390 3447 y(MDDhhmmss)p Fk(+)p Fr(hh'mm')p +Fk(")28 b Fr(or)j Fk(")p Fr(YYMMDDhhmmss-hh'mm')p Fk(")p +Fr(.)39 b(LEN=strlen\(V)-10 b(ALUE\))p Fk(+)p Fr(1.)390 +3574 y Fe(GeneralizedTime:)48 b Fr(V)-10 b(ALUE)33 b(will)g(b)s(e)g(a)g +(n)m(ull)g(terminated)g(string)g(in)g(the)g(same)g(format)h(used)390 +3684 y(to)d(set)g(the)g(v)-5 b(alue.)390 3811 y(OCTET)26 +b(STRING:)h(V)-10 b(ALUE)27 b(will)h(con)m(tain)h(the)f(o)s(ctet)h +(string)e(and)g(LEN)g(will)h(b)s(e)f(the)g(n)m(um)m(b)s(er)390 +3920 y(of)k(o)s(ctets.)390 4047 y Fe(GeneralString:)51 +b Fr(V)-10 b(ALUE)34 b(will)i(con)m(tain)g(the)f(generalstring)g(and)g +(LEN)f(will)h(b)s(e)f(the)h(n)m(um)m(b)s(er)390 4157 +y(of)c(o)s(ctets.)390 4284 y(BIT)j(STRING:)h(V)-10 b(ALUE)34 +b(will)h(con)m(tain)h(the)f(bit)g(string)f(organized)i(b)m(y)e(b)m +(ytes)h(and)f(LEN)h(will)390 4393 y(b)s(e)30 b(the)g(n)m(um)m(b)s(er)f +(of)i(bits.)390 4520 y Fe(CHOICE:)j Fr(If)f(NAME)i(indicates)g(a)g(c)m +(hoice)h(t)m(yp)s(e,)f(V)-10 b(ALUE)34 b(will)h(sp)s(ecify)f(the)g +(alternativ)m(e)i(se-)390 4630 y(lected.)390 4757 y Fe(ANY:)h +Fr(If)f(NAME)i(indicates)g(an)f(an)m(y)g(t)m(yp)s(e,)i(V)-10 +b(ALUE)37 b(will)g(indicate)h(the)g(DER)f(enco)s(ding)g(of)390 +4867 y(the)31 b(structure)e(actually)j(used.)390 4994 +y Fe(Returns:)64 b Fk(ASN1_SUCCESS)38 b Fr(if)k(v)-5 +b(alue)42 b(is)g(returned,)i Fk(ASN1_ELEMENT_NOT_FOUND)36 +b Fr(if)42 b Fk(name)f Fr(is)390 5103 y(not)33 b(a)g(v)-5 +b(alid)34 b(elemen)m(t,)h Fk(ASN1_VALUE_NOT_FOUND)27 +b Fr(if)33 b(there)g(isn't)g(an)m(y)g(v)-5 b(alue)34 +b(for)e(the)h(elemen)m(t)390 5213 y(selected,)28 b(and)d +Fk(ASN1_MEM_ERROR)c Fr(if)26 b(The)f(v)-5 b(alue)26 b(v)m(ector)h +(isn't)e(big)h(enough)f(to)h(store)g(the)g(result,)390 +5322 y(and)k(in)g(this)g(case)i Fk(len)d Fr(will)i(con)m(tain)g(the)g +(n)m(um)m(b)s(er)e(of)i(b)m(ytes)f(needed.)p eop end +%%Page: 15 18 +TeXDict begin 15 17 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(15)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(read)p 685 299 V 54 w(tag)3350 494 +y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_read_tag)d +Fh(\()p Fg(asn1)p 1303 494 28 4 v 40 w(no)s(de)30 b Ff(root)p +Fg(,)i(const)f(c)m(har)f(*)h Ff(name)p Fg(,)h(in)m(t)f(*)565 +604 y Ff(tagValue)p Fg(,)i(in)m(t)e(*)g Ff(classValue)p +Fh(\))390 714 y Fg(ro)s(ot)r Fr(:)41 b(p)s(oin)m(ter)30 +b(to)i(a)e(structure)390 847 y Fg(name)5 b Fr(:)41 b(the)30 +b(name)h(of)f(the)h(elemen)m(t)h(inside)e(a)h(structure.)390 +981 y Fg(tagV)-8 b(alue)5 b Fr(:)43 b(v)-5 b(ariable)31 +b(that)g(will)g(con)m(tain)h(the)e(T)-8 b(A)m(G)32 b(v)-5 +b(alue.)390 1115 y Fg(classV)d(alue)5 b Fr(:)43 b(v)-5 +b(ariable)31 b(that)g(will)g(sp)s(ecify)f(the)g(T)-8 +b(A)m(G)32 b(t)m(yp)s(e.)390 1249 y(Returns)40 b(the)h(T)-8 +b(A)m(G)41 b(and)f(the)h(CLASS)e(of)i(one)g(elemen)m(t)h(inside)e(a)h +(structure.)71 b(CLASS)40 b(can)390 1359 y(ha)m(v)m(e)e(one)g(of)f +(these)h(constan)m(ts:)56 b Fk(ASN1_CLASS_APPLICATION)31 +b Fr(,)39 b Fk(ASN1_CLASS_UNIVERSAL)32 b Fr(,)390 1468 +y Fk(ASN1_CLASS_PRIVATE)25 b Fr(or)31 b Fk(ASN1_CLASS_CONTEXT_SPEC)o +(IFIC)24 b Fr(.)390 1602 y Fe(Returns:)37 b Fk(ASN1_SUCCESS)21 +b Fr(if)k(successful,)g Fk(ASN1_ELEMENT_NOT_FOUND)18 +b Fr(if)25 b Fk(name)e Fr(is)h(not)h(a)g(v)-5 b(alid)390 +1712 y(elemen)m(t.)150 1910 y Fj(asn1)p 396 1910 37 5 +v 55 w(read)p 685 1910 V 54 w(no)s(de)p 995 1910 V 55 +w(v)e(alue)3350 2105 y Fr([F)f(unction])-3599 b Fi(int)53 +b(asn1_read_node_value)f Fh(\()p Fg(asn1)p 1669 2105 +28 4 v 40 w(no)s(de)30 b Ff(node)p Fg(,)i(asn1)p 2371 +2105 V 40 w(data)p 2587 2105 V 41 w(no)s(de)p 2818 2105 +V 39 w(st)f(*)565 2215 y Ff(data)p Fh(\))390 2324 y Fg(no)s(de)5 +b Fr(:)40 b(p)s(oin)m(ter)31 b(to)g(a)f(no)s(de.)390 +2458 y Fg(data)p Fr(:)41 b(a)31 b(p)s(oin)m(t)g(to)g(a)f(asn1)p +1315 2458 V 41 w(data)p 1532 2458 V 40 w(no)s(de)p 1762 +2458 V 40 w(st)390 2592 y(Returns)22 b(the)g(v)-5 b(alue)23 +b(a)g(data)h(no)s(de)d(inside)i(a)g(asn1)p 2084 2592 +V 40 w(no)s(de)f(structure.)37 b(The)22 b(data)i(returned)d(should)390 +2702 y(b)s(e)30 b(handled)f(as)i(constan)m(t)g(v)-5 b(alues.)390 +2836 y Fe(Returns:)40 b Fk(ASN1_SUCCESS)27 b Fr(if)k(the)f(no)s(de)g +(exists.)150 3067 y Fq(4.3)68 b(DER)46 b(functions)150 +3290 y Fj(asn1)p 396 3290 37 5 v 55 w(length)p 786 3290 +V 54 w(der)3350 3486 y Fr([F)-8 b(unction])-3599 b Fi(void)54 +b(asn1_length_der)c Fh(\()p Fg(unsigned)29 b(long)i(in)m(t)g +Ff(len)p Fg(,)g(unsigned)f(c)m(har)h(*)f Ff(der)p Fg(,)i(in)m(t)565 +3595 y(*)f Ff(der_len)p Fh(\))390 3705 y Fg(len)p Fr(:)41 +b(v)-5 b(alue)31 b(to)g(con)m(v)m(ert.)390 3839 y Fg(der)7 +b Fr(:)40 b(bu\013er)29 b(to)i(hold)f(the)h(returned)e(enco)s(ding)h +(\(ma)m(y)i(b)s(e)d Fk(NULL)h Fr(\).)390 3973 y Fg(der)p +523 3973 28 4 v 40 w(len)p Fr(:)40 b(n)m(um)m(b)s(er)29 +b(of)i(meaningful)f(b)m(ytes)h(of)g(ANS)f(\(der[0]..der[der)p +2791 3973 V 40 w(len-1]\).)390 4107 y(Creates)35 b(the)f(DER)h(enco)s +(ding)f(of)g(the)g(pro)m(vided)g(length)h(v)-5 b(alue.)52 +b(The)34 b Fk(der)f Fr(bu\013er)h(m)m(ust)g(ha)m(v)m(e)390 +4216 y(enough)27 b(ro)s(om)f(for)h(the)g(output.)40 b(The)26 +b(maxim)m(um)h(length)g(this)g(function)g(will)g(enco)s(de)g(is)g +Fk(ASN1_)390 4326 y(MAX_LENGTH_SIZE)f Fr(.)390 4460 y(T)-8 +b(o)31 b(kno)m(w)f(the)h(size)g(of)g(the)f(DER)h(enco)s(ding)f(use)g(a) +h Fk(NULL)e Fr(v)-5 b(alue)31 b(for)f Fk(der)f Fr(.)150 +4658 y Fj(asn1)p 396 4658 37 5 v 55 w(o)s(ctet)p 722 +4658 V 53 w(der)3350 4853 y Fr([F)-8 b(unction])-3599 +b Fi(void)54 b(asn1_octet_der)49 b Fh(\()p Fg(const)31 +b(unsigned)f(c)m(har)g(*)h Ff(str)p Fg(,)h(in)m(t)f Ff(str_len)p +Fg(,)565 4963 y(unsigned)e(c)m(har)i(*)g Ff(der)p Fg(,)g(in)m(t)g(*)g +Ff(der_len)p Fh(\))390 5072 y Fg(str)7 b Fr(:)40 b(the)31 +b(input)e(data.)390 5206 y Fg(str)p 503 5206 28 4 v 40 +w(len)p Fr(:)41 b(STR)29 b(length)i(\(str[0]..str[*str)p +1787 5206 V 42 w(len-1]\).)390 5340 y Fg(der)7 b Fr(:)40 +b(enco)s(ded)30 b(string)g(returned.)p eop end +%%Page: 16 19 +TeXDict begin 16 18 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(16)390 299 y Fg(der)p +523 299 28 4 v 40 w(len)p Fr(:)40 b(n)m(um)m(b)s(er)29 +b(of)i(meaningful)f(b)m(ytes)h(of)g(DER)f(\(der[0]..der[der)p +2802 299 V 41 w(len-1]\).)390 436 y(Creates)j(a)f(length-v)-5 +b(alue)34 b(DER)e(enco)s(ding)g(for)g(the)g(input)f(data.)47 +b(The)31 b(DER)h(enco)s(ding)g(of)h(the)390 546 y(input)c(data)i(will)g +(b)s(e)f(placed)h(in)f(the)g Fk(der)g Fr(v)-5 b(ariable.)390 +683 y(Note)32 b(that)f(the)f(OCTET)f(STRING)h(tag)h(is)g(not)f +(included)g(in)g(the)h(output.)390 820 y(This)41 b(function)g(do)s(es)g +(not)h(return)e(an)m(y)i(v)-5 b(alue)42 b(b)s(ecause)f(it)i(is)e(exp)s +(ected)h(that)g Fk(der_len)e Fr(will)390 929 y(con)m(tain)30 +b(enough)e(b)m(ytes)i(to)f(store)g(the)g(string)g(plus)e(the)i(DER)g +(enco)s(ding.)40 b(The)28 b(DER)h(enco)s(ding)390 1039 +y(size)i(can)g(b)s(e)f(obtained)g(using)g Fk(asn1_length_der\(\))c +Fr(.)150 1241 y Fj(asn1)p 396 1241 37 5 v 55 w(enco)s(de)p +818 1241 V 54 w(simple)p 1214 1241 V 55 w(der)3350 1440 +y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_encode_simple_de)q(r)e +Fh(\()p Fg(unsigned)30 b(in)m(t)h Ff(etype)p Fg(,)h(const)f(unsigned) +565 1550 y(c)m(har)g(*)f Ff(str)p Fg(,)i(unsigned)d(in)m(t)i +Ff(str_len)p Fg(,)h(unsigned)e(c)m(har)g(*)h Ff(tl)p +Fg(,)g(unsigned)e(in)m(t)i(*)g Ff(tl_len)p Fh(\))390 +1659 y Fg(et)m(yp)s(e)5 b Fr(:)41 b(The)30 b(t)m(yp)s(e)h(of)f(the)h +(string)f(to)h(b)s(e)f(enco)s(ded)g(\(ASN1)p 2444 1659 +28 4 v 41 w(ETYPE)p 2805 1659 V 39 w(\))390 1796 y Fg(str)7 +b Fr(:)40 b(the)31 b(string)f(data.)390 1934 y Fg(str)p +503 1934 V 40 w(len)p Fr(:)41 b(the)30 b(string)h(length)390 +2071 y Fg(tl)t Fr(:)41 b(the)30 b(enco)s(ded)g(tag)i(and)e(length)390 +2208 y Fg(tl)p 456 2208 V 41 w(len)p Fr(:)40 b(the)31 +b(b)m(ytes)g(of)f(the)h Fk(tl)f Fr(\014eld)390 2345 y(Creates)j(the)g +(DER)g(enco)s(ding)f(for)h(v)-5 b(arious)32 b(simple)h(ASN.1)g(t)m(yp)s +(es)f(lik)m(e)i(strings)e(etc.)49 b(It)32 b(stores)390 +2454 y(the)k(tag)h(and)e(length)h(in)g Fk(tl)f Fr(,)i(whic)m(h)f +(should)f(ha)m(v)m(e)i(space)f(for)g(at)g(least)h Fk(ASN1_MAX_TL_SIZE) +390 2564 y Fr(b)m(ytes.)k(Initially)32 b Fk(tl_len)c +Fr(should)i(con)m(tain)h(the)g(size)g(of)g Fk(tl)e Fr(.)390 +2701 y(The)39 b(complete)i(DER)f(enco)s(ding)g(should)e(consist)i(of)g +(the)g(v)-5 b(alue)40 b(in)g Fk(tl)f Fr(app)s(ended)e(with)j(the)390 +2811 y(pro)m(vided)30 b Fk(str)f Fr(.)390 2948 y Fe(Returns:)40 +b Fk(ASN1_SUCCESS)27 b Fr(if)k(successful)f(or)g(an)g(error)g(v)-5 +b(alue.)150 3150 y Fj(asn1)p 396 3150 37 5 v 55 w(bit)p +601 3150 V 54 w(der)3350 3349 y Fr([F)d(unction])-3599 +b Fi(void)54 b(asn1_bit_der)49 b Fh(\()p Fg(const)31 +b(unsigned)e(c)m(har)i(*)g Ff(str)p Fg(,)g(in)m(t)g Ff(bit_len)p +Fg(,)i(unsigned)565 3459 y(c)m(har)e(*)g Ff(der)p Fg(,)g(in)m(t)g(*)g +Ff(der_len)p Fh(\))390 3568 y Fg(str)7 b Fr(:)40 b(BIT)30 +b(string.)390 3705 y Fg(bit)p 507 3705 28 4 v 40 w(len)p +Fr(:)41 b(n)m(um)m(b)s(er)29 b(of)i(meaningful)f(bits)g(in)g(STR.)390 +3842 y Fg(der)7 b Fr(:)40 b(string)30 b(returned.)390 +3980 y Fg(der)p 523 3980 V 40 w(len)p Fr(:)40 b(n)m(um)m(b)s(er)29 +b(of)i(meaningful)f(b)m(ytes)h(of)g(DER)f(\(der[0]..der[ans)p +2807 3980 V 41 w(len-1]\).)390 4117 y(Creates)i(a)f(length-v)-5 +b(alue)33 b(DER)e(enco)s(ding)g(for)g(the)g(input)f(data)i(as)f(it)h(w) +m(ould)f(ha)m(v)m(e)h(b)s(een)f(for)g(a)390 4226 y(BIT)f(STRING.)g(The) +g(DER)h(enco)s(ded)f(data)h(will)f(b)s(e)g(copied)h(in)f +Fk(der)f Fr(.)390 4363 y(Note)j(that)f(the)f(BIT)g(STRING)g(tag)i(is)e +(not)h(included)e(in)h(the)h(output.)390 4500 y(This)41 +b(function)g(do)s(es)g(not)h(return)e(an)m(y)i(v)-5 b(alue)42 +b(b)s(ecause)f(it)i(is)e(exp)s(ected)h(that)g Fk(der_len)e +Fr(will)390 4610 y(con)m(tain)30 b(enough)e(b)m(ytes)i(to)f(store)g +(the)g(string)g(plus)e(the)i(DER)g(enco)s(ding.)40 b(The)28 +b(DER)h(enco)s(ding)390 4720 y(size)i(can)g(b)s(e)f(obtained)g(using)g +Fk(asn1_length_der\(\))c Fr(.)150 4921 y Fj(asn1)p 396 +4921 37 5 v 55 w(der)p 625 4921 V 54 w(co)s(ding)3350 +5121 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_der_coding)d +Fh(\()p Fg(asn1)p 1407 5121 28 4 v 41 w(no)s(de)30 b +Ff(element)p Fg(,)i(const)f(c)m(har)g(*)g Ff(name)p Fg(,)g(v)m(oid)g(*) +565 5230 y Ff(ider)p Fg(,)h(in)m(t)f(*)g Ff(len)p Fg(,)g(c)m(har)g(*)f +Ff(ErrorDescription)p Fh(\))390 5340 y Fg(elemen)m(t)r +Fr(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(elemen)m(t)p +eop end +%%Page: 17 20 +TeXDict begin 17 19 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(17)390 299 y Fg(name)5 +b Fr(:)39 b(the)27 b(name)h(of)f(the)g(structure)g(y)m(ou)g(w)m(an)m(t) +h(to)g(enco)s(de)f(\(it)h(m)m(ust)f(b)s(e)f(inside)h(*POINTER\).)390 +440 y Fg(ider)7 b Fr(:)39 b(v)m(ector)30 b(that)f(will)f(con)m(tain)i +(the)e(DER)h(enco)s(ding.)40 b(DER)28 b(m)m(ust)g(b)s(e)g(a)h(p)s(oin)m +(ter)f(to)h(memory)390 549 y(cells)i(already)g(allo)s(cated.)390 +690 y Fg(len)p Fr(:)49 b(n)m(um)m(b)s(er)33 b(of)h(b)m(ytes)h(of)g(*)g +Fk(ider)e Fr(:)48 b Fk(ider)34 b Fr([0]..)54 b Fk(ider)33 +b Fr([len-1],)k(Initialy)e(holds)f(the)g(sizeof)i(of)390 +799 y(der)30 b(v)m(ector.)390 940 y Fg(ErrorDescription)p +Fr(:)41 b(return)29 b(the)i(error)f(description)g(or)g(an)h(empt)m(y)f +(string)h(if)f(success.)390 1081 y(Creates)h(the)g(DER)f(enco)s(ding)g +(for)h(the)f(NAME)h(structure)f(\(inside)g(*POINTER)g(structure\).)390 +1221 y Fe(Returns:)47 b Fk(ASN1_SUCCESS)30 b Fr(if)k(DER)g(enco)s(ding) +f(OK,)g Fk(ASN1_ELEMENT_NOT_FOUND)28 b Fr(if)33 b Fk(name)g +Fr(is)390 1331 y(not)h(a)g(v)-5 b(alid)35 b(elemen)m(t,)h +Fk(ASN1_VALUE_NOT_FOUND)29 b Fr(if)34 b(there)g(is)g(an)g(elemen)m(t)h +(without)f(a)g(v)-5 b(alue,)390 1441 y Fk(ASN1_MEM_ERROR)24 +b Fr(if)29 b(the)f Fk(ider)g Fr(v)m(ector)i(isn't)e(big)h(enough)f(and) +g(in)g(this)g(case)h Fk(len)f Fr(will)h(con)m(tain)390 +1550 y(the)i(length)f(needed.)150 1756 y Fj(asn1)p 396 +1756 37 5 v 55 w(get)p 616 1756 V 54 w(length)p 1005 +1756 V 54 w(der)3350 1959 y Fr([F)-8 b(unction])-3599 +b Fi(long)54 b(asn1_get_length_der)d Fh(\()p Fg(const)31 +b(unsigned)e(c)m(har)i(*)g Ff(der)p Fg(,)g(in)m(t)g Ff(der_len)p +Fg(,)565 2068 y(in)m(t)g(*)g Ff(len)p Fh(\))390 2178 +y Fg(der)7 b Fr(:)40 b(DER)30 b(data)h(to)g(deco)s(de.)390 +2318 y Fg(der)p 523 2318 28 4 v 40 w(len)p Fr(:)40 b(Length)31 +b(of)f(DER)h(data)g(to)g(deco)s(de.)390 2459 y Fg(len)p +Fr(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(length) +f(of)h(the)g(DER)f(length)h(\014eld.)390 2600 y(Extract)g(a)g(length)g +(\014eld)f(from)g(DER)g(data.)390 2740 y Fe(Returns:)40 +b Fr(Return)29 b(the)h(deco)s(ded)f(length)h(v)-5 b(alue,)30 +b(or)g(-1)g(on)g(inde\014nite)f(length,)h(or)g(-2)g(when)f(the)390 +2850 y(v)-5 b(alue)30 b(w)m(as)h(to)s(o)f(big)g(to)h(\014t)e(in)h(a)g +(in)m(t,)h(or)f(-4)g(when)f(the)h(deco)s(ded)g(length)g(v)-5 +b(alue)30 b(plus)f Fk(len)g Fr(w)m(ould)390 2960 y(exceed)i +Fk(der_len)e Fr(.)150 3165 y Fj(asn1)p 396 3165 37 5 +v 55 w(get)p 616 3165 V 54 w(tag)p 839 3165 V 53 w(der)3350 +3368 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_get_tag_der)e +Fh(\()p Fg(const)31 b(unsigned)e(c)m(har)i(*)g Ff(der)p +Fg(,)g(in)m(t)g Ff(der_len)p Fg(,)565 3478 y(unsigned)e(c)m(har)i(*)g +Ff(cls)p Fg(,)g(in)m(t)g(*)g Ff(len)p Fg(,)g(unsigned)f(long)h(*)g +Ff(tag)p Fh(\))390 3587 y Fg(der)7 b Fr(:)40 b(DER)30 +b(data)h(to)g(deco)s(de.)390 3728 y Fg(der)p 523 3728 +28 4 v 40 w(len)p Fr(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g(deco)s +(de.)390 3868 y Fg(cls)t Fr(:)41 b(Output)29 b(v)-5 b(ariable)31 +b(con)m(taining)h(deco)s(ded)e(class.)390 4009 y Fg(len)p +Fr(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(length) +f(of)h(the)g(DER)f(T)-8 b(A)m(G)31 b(data.)390 4150 y +Fg(tag)8 b Fr(:)42 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h +(the)f(deco)s(ded)f(tag.)390 4290 y(Deco)s(de)h(the)g(class)g(and)f(T) +-8 b(A)m(G)31 b(from)f(DER)h(co)s(de.)390 4431 y Fe(Returns:)40 +b Fr(Returns)30 b Fk(ASN1_SUCCESS)d Fr(on)j(success,)h(or)f(an)h +(error.)150 4637 y Fj(asn1)p 396 4637 37 5 v 55 w(get)p +616 4637 V 54 w(length)p 1005 4637 V 54 w(b)s(er)3350 +4839 y Fr([F)-8 b(unction])-3599 b Fi(long)54 b(asn1_get_length_ber)d +Fh(\()p Fg(const)31 b(unsigned)e(c)m(har)i(*)g Ff(ber)p +Fg(,)g(in)m(t)g Ff(ber_len)p Fg(,)565 4949 y(in)m(t)g(*)g +Ff(len)p Fh(\))390 5059 y Fg(b)s(er)7 b Fr(:)39 b(BER)31 +b(data)g(to)g(deco)s(de.)390 5199 y Fg(b)s(er)p 526 5199 +28 4 v 39 w(len)p Fr(:)41 b(Length)30 b(of)h(BER)f(data)h(to)g(deco)s +(de.)390 5340 y Fg(len)p Fr(:)41 b(Output)29 b(v)-5 b(ariable)31 +b(con)m(taining)h(the)f(length)f(of)h(the)g(BER)f(length)h(\014eld.)p +eop end +%%Page: 18 21 +TeXDict begin 18 20 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(18)390 299 y(Extract)31 +b(a)g(length)f(\014eld)g(from)g(BER)g(data.)41 b(The)30 +b(di\013erence)h(to)g Fk(asn1_get_length_der\(\))24 b +Fr(is)390 408 y(that)31 b(this)f(function)g(will)h(return)e(a)i(length) +g(ev)m(en)g(if)f(the)h(v)-5 b(alue)31 b(has)f(inde\014nite)g(enco)s +(ding.)390 543 y Fe(Returns:)40 b Fr(Return)27 b(the)i(deco)s(ded)g +(length)g(v)-5 b(alue,)30 b(or)e(negativ)m(e)j(v)-5 b(alue)29 +b(when)f(the)h(v)-5 b(alue)29 b(w)m(as)g(to)s(o)390 653 +y(big.)390 787 y Fe(Since:)41 b Fr(2.0)150 986 y Fj(asn1)p +396 986 37 5 v 55 w(get)p 616 986 V 54 w(o)s(ctet)p 941 +986 V 53 w(der)3350 1183 y Fr([F)-8 b(unction])-3599 +b Fi(int)53 b(asn1_get_octet_der)e Fh(\()p Fg(const)31 +b(unsigned)f(c)m(har)g(*)h Ff(der)p Fg(,)h(in)m(t)f Ff(der_len)p +Fg(,)h(in)m(t)565 1293 y(*)f Ff(ret_len)p Fg(,)i(unsigned)c(c)m(har)i +(*)f Ff(str)p Fg(,)i(in)m(t)f Ff(str_size)p Fg(,)i(in)m(t)e(*)f +Ff(str_len)p Fh(\))390 1402 y Fg(der)7 b Fr(:)40 b(DER)30 +b(data)h(to)g(deco)s(de)g(con)m(taining)h(the)e(OCTET)f(SEQUENCE.)390 +1537 y Fg(der)p 523 1537 28 4 v 40 w(len)p Fr(:)40 b(Length)31 +b(of)f(DER)h(data)g(to)g(deco)s(de.)390 1671 y Fg(ret)p +507 1671 V 40 w(len)p Fr(:)41 b(Output)29 b(v)-5 b(ariable)32 +b(con)m(taining)f(the)g(length)g(of)f(the)h(DER)f(data.)390 +1806 y Fg(str)7 b Fr(:)40 b(Pre-allo)s(cated)33 b(output)d(bu\013er)f +(to)i(put)f(deco)s(ded)g(OCTET)f(SEQUENCE)g(in.)390 1940 +y Fg(str)p 503 1940 V 40 w(size)5 b Fr(:)41 b(Length)31 +b(of)f(pre-allo)s(cated)j(output)d(bu\013er.)390 2075 +y Fg(str)p 503 2075 V 40 w(len)p Fr(:)41 b(Output)29 +b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(length)f(of)h(the)f(OCTET)f +(SEQUENCE.)390 2209 y(Extract)i(an)g(OCTET)d(SEQUENCE)i(from)f(DER)i +(data.)390 2344 y Fe(Returns:)40 b Fr(Returns)30 b Fk(ASN1_SUCCESS)d +Fr(on)j(success,)h(or)f(an)h(error.)150 2543 y Fj(asn1)p +396 2543 37 5 v 55 w(get)p 616 2543 V 54 w(ob)7 b(ject)p +1002 2543 V 54 w(id)p 1158 2543 V 54 w(der)3350 2740 +y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_get_object_id_de)q(r)e +Fh(\()p Fg(const)32 b(unsigned)d(c)m(har)i(*)f Ff(der)p +Fg(,)i(in)m(t)565 2849 y Ff(der_len)p Fg(,)h(in)m(t)e(*)f +Ff(ret_len)p Fg(,)j(c)m(har)e(*)g Ff(str)p Fg(,)g(in)m(t)g +Ff(str_size)p Fh(\))390 2959 y Fg(der)7 b Fr(:)40 b(DER)30 +b(data)h(to)g(deco)s(de)g(con)m(taining)h(the)e(OBJECT)g(IDENTIFIER)390 +3093 y Fg(der)p 523 3093 28 4 v 40 w(len)p Fr(:)40 b(Length)31 +b(of)f(DER)h(data)g(to)g(deco)s(de.)390 3228 y Fg(ret)p +507 3228 V 40 w(len)p Fr(:)41 b(Output)29 b(v)-5 b(ariable)32 +b(con)m(taining)f(the)g(length)g(of)f(the)h(DER)f(data.)390 +3362 y Fg(str)7 b Fr(:)40 b(Pre-allo)s(cated)33 b(output)d(bu\013er)f +(to)i(put)f(the)g(textual)i(ob)5 b(ject)31 b(id)f(in.)390 +3497 y Fg(str)p 503 3497 V 40 w(size)5 b Fr(:)41 b(Length)31 +b(of)f(pre-allo)s(cated)j(output)d(bu\013er.)390 3631 +y(Con)m(v)m(erts)h(a)g(DER)f(enco)s(ded)g(ob)5 b(ject)32 +b(iden)m(ti\014er)e(to)h(its)g(textual)h(form.)390 3766 +y Fe(Returns:)40 b Fk(ASN1_SUCCESS)27 b Fr(on)k(success,)g(or)f(an)g +(error.)150 3965 y Fj(asn1)p 396 3965 37 5 v 55 w(get)p +616 3965 V 54 w(bit)p 820 3965 V 54 w(der)3350 4162 y +Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_get_bit_der)e +Fh(\()p Fg(const)31 b(unsigned)e(c)m(har)i(*)g Ff(der)p +Fg(,)g(in)m(t)g Ff(der_len)p Fg(,)i(in)m(t)d(*)565 4271 +y Ff(ret_len)p Fg(,)j(unsigned)c(c)m(har)i(*)g Ff(str)p +Fg(,)g(in)m(t)g Ff(str_size)p Fg(,)i(in)m(t)e(*)g Ff(bit_len)p +Fh(\))390 4381 y Fg(der)7 b Fr(:)40 b(DER)30 b(data)h(to)g(deco)s(de)g +(con)m(taining)h(the)e(BIT)h(SEQUENCE.)390 4515 y Fg(der)p +523 4515 28 4 v 40 w(len)p Fr(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g +(deco)s(de.)390 4650 y Fg(ret)p 507 4650 V 40 w(len)p +Fr(:)41 b(Output)29 b(v)-5 b(ariable)32 b(con)m(taining)f(the)g(length) +g(of)f(the)h(DER)f(data.)390 4784 y Fg(str)7 b Fr(:)40 +b(Pre-allo)s(cated)33 b(output)d(bu\013er)f(to)i(put)f(deco)s(ded)g +(BIT)g(SEQUENCE)f(in.)390 4919 y Fg(str)p 503 4919 V +40 w(size)5 b Fr(:)41 b(Length)31 b(of)f(pre-allo)s(cated)j(output)d +(bu\013er.)390 5053 y Fg(bit)p 507 5053 V 40 w(len)p +Fr(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(size)g +(of)g(the)f(BIT)g(SEQUENCE.)390 5188 y(Extract)h(a)g(BIT)f(SEQUENCE)f +(from)h(DER)h(data.)390 5322 y Fe(Returns:)40 b Fk(ASN1_SUCCESS)27 +b Fr(on)k(success,)g(or)f(an)g(error.)p eop end +%%Page: 19 22 +TeXDict begin 19 21 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(19)150 299 y Fj(asn1)p +396 299 37 5 v 55 w(der)p 625 299 V 54 w(deco)s(ding2)3350 +497 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_der_decoding2)e +Fh(\()p Fg(asn1)p 1564 497 28 4 v 41 w(no)s(de)29 b(*)i +Ff(element)p Fg(,)i(const)e(v)m(oid)g(*)f Ff(ider)p Fg(,)i(in)m(t)565 +607 y(*)f Ff(max_ider_len)p Fg(,)j(unsigned)29 b(in)m(t)i +Ff(flags)p Fg(,)h(c)m(har)f(*)g Ff(errorDescription)p +Fh(\))390 717 y Fg(elemen)m(t)r Fr(:)42 b(p)s(oin)m(ter)31 +b(to)g(an)f(ASN1)h(structure.)390 853 y Fg(ider)7 b Fr(:)40 +b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.)390 +989 y Fg(max)p 565 989 V 40 w(ider)p 757 989 V 40 w(len)p +Fr(:)37 b(p)s(oin)m(ter)22 b(to)i(an)e(in)m(teger)i(giving)f(the)g +(information)g(ab)s(out)f(the)h(maximal)g(n)m(um)m(b)s(er)390 +1099 y(of)29 b(b)m(ytes)g(o)s(ccupied)f(b)m(y)h(*)g Fk(ider)e +Fr(.)41 b(The)28 b(real)h(size)g(of)g(the)g(DER)g(enco)s(ding)f(is)h +(returned)f(through)390 1208 y(this)i(p)s(oin)m(ter.)390 +1345 y Fg(\015ags)t Fr(:)41 b(\015ags)30 b(con)m(trolling)j(the)d(b)s +(eha)m(viour)g(of)h(the)f(function.)390 1481 y Fg(errorDescription)p +Fr(:)41 b(n)m(ull-terminated)32 b(string)e(con)m(tains)h(details)h +(when)d(an)h(error)g(o)s(ccurred.)390 1617 y(Fill)38 +b(the)f(structure)g(*)h Fk(element)d Fr(with)h(v)-5 b(alues)38 +b(of)f(a)h(DER)f(enco)s(ding)g(string.)61 b(The)36 b(structure)390 +1727 y(m)m(ust)30 b(just)g(b)s(e)g(created)h(with)f(function)g +Fk(asn1_create_element\(\))25 b Fr(.)390 1863 y(If)d +Fk(ASN1_DECODE_FLAG_ALLOW_P)o(ADD)o(ING)16 b Fr(\015ag)23 +b(is)f(set)h(then)f(the)g(function)g(will)h(ignore)g(padding)390 +1973 y(after)31 b(the)h(deco)s(ded)e(DER)h(data.)43 b(Up)s(on)30 +b(a)i(successful)e(return)g(the)h(v)-5 b(alue)32 b(of)f(*)g +Fk(max_ider_len)390 2082 y Fr(will)g(b)s(e)e(set)i(to)g(the)g(n)m(um)m +(b)s(er)e(of)i(b)m(ytes)g(deco)s(ded.)390 2218 y(If)j +Fk(ASN1_DECODE_FLAG_STRICT_DE)o(R)29 b Fr(\015ag)35 b(is)g(set)h(then)e +(the)h(function)g(will)g(not)h(deco)s(de)f(an)m(y)390 +2328 y(BER-enco)s(ded)30 b(elemen)m(ts.)390 2464 y Fe(Returns:)39 +b Fk(ASN1_SUCCESS)25 b Fr(if)i(DER)h(enco)s(ding)g(OK,)f +Fk(ASN1_ELEMENT_NOT_FOUND)22 b Fr(if)28 b Fk(ELEMENT)390 +2574 y Fr(is)g Fk(NULL)e Fr(,)i(and)g Fk(ASN1_TAG_ERROR)23 +b Fr(or)28 b Fk(ASN1_DER_ERROR)c Fr(if)j(the)h(der)f(enco)s(ding)h(do)s +(esn't)f(matc)m(h)390 2684 y(the)k(structure)e(name)i(\(*)g +Fk(ELEMENT)d Fr(deleted\).)150 2885 y Fj(asn1)p 396 2885 +37 5 v 55 w(der)p 625 2885 V 54 w(deco)s(ding)3350 3083 +y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_der_decoding)e +Fh(\()p Fg(asn1)p 1512 3083 28 4 v 40 w(no)s(de)30 b(*)h +Ff(element)p Fg(,)i(const)d(v)m(oid)h(*)g Ff(ider)p Fg(,)h(in)m(t)565 +3193 y Ff(ider_len)p Fg(,)h(c)m(har)e(*)g Ff(errorDescription)p +Fh(\))390 3302 y Fg(elemen)m(t)r Fr(:)42 b(p)s(oin)m(ter)31 +b(to)g(an)f(ASN1)h(structure.)390 3439 y Fg(ider)7 b +Fr(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.) +390 3575 y Fg(ider)p 548 3575 V 40 w(len)p Fr(:)41 b(n)m(um)m(b)s(er)29 +b(of)h(b)m(ytes)h(of)g(*)f Fk(ider)g Fr(:)40 b Fk(ider)29 +b Fr([0]..)42 b Fk(ider)30 b Fr([len-1].)390 3711 y Fg +(errorDescription)p Fr(:)41 b(n)m(ull-terminated)32 b(string)e(con)m +(tains)h(details)h(when)d(an)h(error)g(o)s(ccurred.)390 +3847 y(Fill)38 b(the)f(structure)g(*)h Fk(element)d Fr(with)h(v)-5 +b(alues)38 b(of)f(a)h(DER)f(enco)s(ding)g(string.)61 +b(The)36 b(structure)390 3957 y(m)m(ust)30 b(just)g(b)s(e)g(created)h +(with)f(function)g Fk(asn1_create_element\(\))25 b Fr(.)390 +4093 y(Note)32 b(that)f(the)f(*)h Fk(element)d Fr(v)-5 +b(ariable)32 b(is)e(pro)m(vided)g(as)h(a)f(p)s(oin)m(ter)h(for)f +(historical)i(reasons.)390 4229 y Fe(Returns:)39 b Fk(ASN1_SUCCESS)25 +b Fr(if)i(DER)h(enco)s(ding)g(OK,)f Fk(ASN1_ELEMENT_NOT_FOUND)22 +b Fr(if)28 b Fk(ELEMENT)390 4339 y Fr(is)g Fk(NULL)e +Fr(,)i(and)g Fk(ASN1_TAG_ERROR)23 b Fr(or)28 b Fk(ASN1_DER_ERROR)c +Fr(if)j(the)h(der)f(enco)s(ding)h(do)s(esn't)f(matc)m(h)390 +4449 y(the)k(structure)e(name)i(\(*)g Fk(ELEMENT)d Fr(deleted\).)150 +4650 y Fj(asn1)p 396 4650 37 5 v 55 w(der)p 625 4650 +V 54 w(deco)s(ding)p 1153 4650 V 55 w(elemen)m(t)3350 +4848 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_der_decoding_ele)q +(ment)f Fh(\()p Fg(asn1)p 1930 4848 28 4 v 41 w(no)s(de)30 +b(*)g Ff(structure)p Fg(,)k(const)d(c)m(har)565 4958 +y(*)g Ff(elementName)p Fg(,)j(const)d(v)m(oid)g(*)f Ff(ider)p +Fg(,)i(in)m(t)f Ff(len)p Fg(,)g(c)m(har)g(*)g Ff(errorDescription)p +Fh(\))390 5067 y Fg(structure)5 b Fr(:)40 b(p)s(oin)m(ter)31 +b(to)g(an)f(ASN1)h(structure)390 5204 y Fg(elemen)m(tName)5 +b Fr(:)43 b(name)31 b(of)f(the)h(elemen)m(t)g(to)h(\014ll)390 +5340 y Fg(ider)7 b Fr(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g +(DER)g(enco)s(ding)f(of)g(the)h(whole)g(structure.)p +eop end +%%Page: 20 23 +TeXDict begin 20 22 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(20)390 299 y Fg(len)p +Fr(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*der:)40 +b(der[0]..der[len-1])390 435 y Fg(errorDescription)p +Fr(:)h(n)m(ull-terminated)32 b(string)e(con)m(tains)h(details)h(when)d +(an)h(error)g(o)s(ccurred.)390 572 y(Fill)41 b(the)g(elemen)m(t)g +(named)f Fk(ELEMENTNAME)d Fr(with)j(v)-5 b(alues)40 b(of)h(a)f(DER)g +(enco)s(ding)g(string.)70 b(The)390 682 y(structure)36 +b(m)m(ust)h(just)f(b)s(e)g(created)i(with)e(function)h +Fk(asn1_create_element\(\))31 b Fr(.)60 b(The)36 b(DER)390 +791 y(v)m(ector)d(m)m(ust)e(con)m(tain)h(the)f(enco)s(ding)g(string)g +(of)g(the)h(whole)f Fk(STRUCTURE)d Fr(.)43 b(If)31 b(an)g(error)f(o)s +(ccurs)390 901 y(during)f(the)i(deco)s(ding)f(pro)s(cedure,)f(the)i(*)g +Fk(STRUCTURE)d Fr(is)i(deleted)h(and)f(set)h(equal)g(to)g +Fk(NULL)e Fr(.)390 1037 y(This)h(function)h(is)h(deprecated)f(and)g(ma) +m(y)h(just)f(b)s(e)f(an)h(alias)i(to)f(asn1)p 2820 1037 +28 4 v 40 w(der)p 2987 1037 V 40 w(deco)s(ding)f(in)g(future)390 +1147 y(v)m(ersions.)41 b(Use)31 b Fk(asn1_der_decoding\(\))25 +b Fr(instead.)390 1284 y Fe(Returns:)63 b Fk(ASN1_SUCCESS)39 +b Fr(if)j(DER)g(enco)s(ding)g(OK,)f Fk(ASN1_ELEMENT_NOT_FOUND)36 +b Fr(if)42 b(ELE-)390 1393 y(MENT)24 b(is)h Fk(NULL)e +Fr(or)h Fk(elementName)d Fr(==)j(NULL,)g(and)g Fk(ASN1_TAG_ERROR)d +Fr(or)j Fk(ASN1_DER_ERROR)390 1503 y Fr(if)30 b(the)h(der)f(enco)s +(ding)g(do)s(esn't)g(matc)m(h)h(the)g(structure)f Fk(structure)e +Fr(\(*ELEMENT)i(deleted\).)150 1704 y Fj(asn1)p 396 1704 +37 5 v 55 w(der)p 625 1704 V 54 w(deco)s(ding)p 1153 +1704 V 55 w(startEnd)3350 1903 y Fr([F)-8 b(unction])-3599 +b Fi(int)53 b(asn1_der_decoding_sta)q(rtEn)q(d)f Fh(\()p +Fg(asn1)p 1983 1903 28 4 v 40 w(no)s(de)30 b Ff(element)p +Fg(,)j(const)d(v)m(oid)h(*)565 2013 y Ff(ider)p Fg(,)h(in)m(t)f +Ff(ider_len)p Fg(,)i(const)e(c)m(har)f(*)h Ff(name_element)p +Fg(,)j(in)m(t)d(*)g Ff(start)p Fg(,)h(in)m(t)f(*)g Ff(end)p +Fh(\))390 2122 y Fg(elemen)m(t)r Fr(:)42 b(p)s(oin)m(ter)31 +b(to)g(an)f(ASN1)h(elemen)m(t)390 2259 y Fg(ider)7 b +Fr(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.) +390 2395 y Fg(ider)p 548 2395 V 40 w(len)p Fr(:)41 b(n)m(um)m(b)s(er)29 +b(of)h(b)m(ytes)h(of)g(*)f Fk(ider)g Fr(:)40 b Fk(ider)29 +b Fr([0]..)42 b Fk(ider)30 b Fr([len-1])390 2532 y Fg(name)p +608 2532 V 40 w(elemen)m(t)r Fr(:)42 b(an)31 b(elemen)m(t)g(of)g(NAME)g +(structure.)390 2669 y Fg(start)r Fr(:)41 b(the)31 b(p)s(osition)f(of)h +(the)f(\014rst)g(b)m(yte)h(of)g(NAME)p 2189 2669 V 40 +w(ELEMENT)f(deco)s(ding)g(\()h Fk(ider)e Fr([*start]\))390 +2805 y Fg(end)t Fr(:)40 b(the)30 b(p)s(osition)h(of)f(the)h(last)g(b)m +(yte)g(of)g(NAME)p 2129 2805 V 40 w(ELEMENT)f(deco)s(ding)g(\()h +Fk(ider)e Fr([*end]\))390 2942 y(Find)45 b(the)h(start)g(and)f(end)g(p) +s(oin)m(t)g(of)h(an)f(elemen)m(t)i(in)e(a)h(DER)g(enco)s(ding)f +(string.)87 b(I)45 b(mean)390 3051 y(that)35 b(if)f(y)m(ou)h(ha)m(v)m +(e)h(a)e(der)g(enco)s(ding)g(and)g(y)m(ou)h(ha)m(v)m(e)g(already)g +(used)f(the)g(function)g Fk(asn1_der_)390 3161 y(decoding\(\))22 +b Fr(to)j(\014ll)g(a)g(structure,)h(it)f(ma)m(y)h(happ)s(en)d(that)i(y) +m(ou)g(w)m(an)m(t)h(to)f(\014nd)e(the)i(piece)h(of)f(string)390 +3270 y(concerning)31 b(an)f(elemen)m(t)i(of)e(the)h(structure.)390 +3407 y(One)f(example)h(is)f(the)h(sequence)g Fk(")p Fr +(tbsCerti\014cate)p Fk(")g Fr(inside)f(an)g(X509)i(certi\014cate.)390 +3544 y(Note)38 b(that)g(since)f(libtasn1)g(3.7)h(the)f +Fk(ider)f Fr(and)g Fk(ider_len)f Fr(parameters)i(can)g(b)s(e)f +(omitted,)k(if)390 3653 y(the)31 b(elemen)m(t)g(is)g(already)g(deco)s +(ded)f(using)g Fk(asn1_der_decoding\(\))25 b Fr(.)390 +3790 y Fe(Returns:)63 b Fk(ASN1_SUCCESS)39 b Fr(if)j(DER)g(enco)s(ding) +g(OK,)f Fk(ASN1_ELEMENT_NOT_FOUND)36 b Fr(if)42 b(ELE-)390 +3899 y(MENT)37 b(is)g Fk(asn1_node)e Fr(EMPTY)h(or)h +Fk(name_element)d Fr(is)j(not)g(a)h(v)-5 b(alid)37 b(elemen)m(t,)j +Fk(ASN1_TAG_)390 4009 y(ERROR)j Fr(or)h Fk(ASN1_DER_ERROR)d +Fr(if)j(the)h(der)f(enco)s(ding)g(do)s(esn't)g(matc)m(h)i(the)e +(structure)g(ELE-)390 4119 y(MENT.)150 4320 y Fj(asn1)p +396 4320 37 5 v 55 w(expand)p 836 4320 V 54 w(an)m(y)p +1080 4320 V 53 w(de\014ned)p 1517 4320 V 55 w(b)m(y)3350 +4519 y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_expand_any_defin)q +(ed_b)q(y)f Fh(\()p Fg(asn1)p 1983 4519 28 4 v 40 w(no)s(de)30 +b Ff(definitions)p Fg(,)565 4628 y(asn1)p 748 4628 V +40 w(no)s(de)g(*)h Ff(element)p Fh(\))390 4738 y Fg(de\014nitions)t +Fr(:)40 b(ASN1)31 b(de\014nitions)390 4875 y Fg(elemen)m(t)r +Fr(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure)390 +5011 y(Expands)36 b(ev)m(ery)j Fk(")p Fr(ANY)f(DEFINED)g(BY)p +Fk(")g Fr(elemen)m(t)h(of)f(a)g(structure)g(created)g(from)g(a)g(DER) +390 5121 y(deco)s(ding)c(pro)s(cess)g(\(asn1)p 1314 5121 +V 41 w(der)p 1482 5121 V 40 w(deco)s(ding)g(function\).)53 +b(The)34 b(elemen)m(t)i(ANY)f(m)m(ust)f(b)s(e)g(de\014ned)390 +5230 y(b)m(y)26 b(an)f(OBJECT)g(IDENTIFIER.)h(The)f(t)m(yp)s(e)h(used)f +(to)i(expand)e(the)h(elemen)m(t)h(ANY)g(is)f(the)g(\014rst)390 +5340 y(one)31 b(follo)m(wing)h(the)e(de\014nition)g(of)h(the)f(actual)i +(v)-5 b(alue)31 b(of)f(the)h(OBJECT)e(IDENTIFIER.)p eop +end +%%Page: 21 24 +TeXDict begin 21 23 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(21)390 299 y Fe(Returns:)55 +b Fk(ASN1_SUCCESS)35 b Fr(if)j(Substitution)f(OK,)g Fk +(ASN1_ERROR_TYPE_ANY)c Fr(if)k(some)i Fk(")p Fr(ANY)390 +408 y(DEFINED)34 b(BY)p Fk(")f Fr(elemen)m(t)i(couldn't)e(b)s(e)g +(expanded)f(due)g(to)i(a)f(problem)g(in)g(OBJECT)p 3504 +408 28 4 v 39 w(ID)g(-)p Fk(>)390 518 y Fr(TYPE)d(asso)s(ciation,)i(or) +f(other)f(error)g(co)s(des)h(dep)s(ending)e(on)h(DER)g(deco)s(ding.)150 +715 y Fj(asn1)p 396 715 37 5 v 55 w(expand)p 836 715 +V 54 w(o)s(ctet)p 1161 715 V 53 w(string)3350 910 y Fr([F)-8 +b(unction])-3599 b Fi(int)53 b(asn1_expand_octet_str)q(ing)f +Fh(\()p Fg(asn1)p 1878 910 28 4 v 41 w(no)s(de)29 b Ff(definitions)p +Fg(,)34 b(asn1)p 2946 910 V 40 w(no)s(de)565 1020 y(*)d +Ff(element)p Fg(,)i(const)d(c)m(har)h(*)g Ff(octetName)p +Fg(,)i(const)e(c)m(har)g(*)g Ff(objectName)p Fh(\))390 +1129 y Fg(de\014nitions)t Fr(:)40 b(ASN1)31 b(de\014nitions)390 +1263 y Fg(elemen)m(t)r Fr(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h +(structure)390 1396 y Fg(o)s(ctetName)5 b Fr(:)43 b(name)30 +b(of)h(the)g(OCTECT)d(STRING)i(\014eld)g(to)h(expand.)390 +1530 y Fg(ob)5 b(jectName)g Fr(:)45 b(name)31 b(of)h(the)g(OBJECT)e +(IDENTIFIER)h(\014eld)g(to)i(use)e(to)h(de\014ne)f(the)g(t)m(yp)s(e)h +(for)390 1639 y(expansion.)390 1773 y(Expands)23 b(an)h +Fk(")p Fr(OCTET)e(STRING)p Fk(")i Fr(elemen)m(t)h(of)g(a)f(structure)g +(created)h(from)f(a)h(DER)f(deco)s(ding)390 1882 y(pro)s(cess)39 +b(\(the)h Fk(asn1_der_decoding\(\))34 b Fr(function\).)68 +b(The)39 b(t)m(yp)s(e)h(used)f(for)g(expansion)g(is)h(the)390 +1992 y(\014rst)c(one)h(follo)m(wing)h(the)f(de\014nition)g(of)f(the)h +(actual)i(v)-5 b(alue)37 b(of)g(the)g(OBJECT)e(IDENTIFIER)390 +2101 y(indicated)c(b)m(y)f(OBJECTNAME.)390 2235 y Fe(Returns:)36 +b Fk(ASN1_SUCCESS)18 b Fr(if)j(substitution)g(OK,)g Fk +(ASN1_ELEMENT_NOT_FOUND)15 b Fr(if)22 b Fk(objectName)390 +2345 y Fr(or)j Fk(octetName)e Fr(are)j(not)f(correct,)j +Fk(ASN1_VALUE_NOT_VALID)20 b Fr(if)25 b(it)h(w)m(asn't)g(p)s(ossible)f +(to)h(\014nd)e(the)390 2454 y(t)m(yp)s(e)31 b(to)g(use)f(for)g +(expansion,)g(or)h(other)f(errors)g(dep)s(ending)f(on)h(DER)h(deco)s +(ding.)150 2651 y Fj(asn1)p 396 2651 37 5 v 55 w(deco)s(de)p +818 2651 V 54 w(simple)p 1214 2651 V 55 w(der)3350 2846 +y Fr([F)-8 b(unction])-3599 b Fi(int)53 b(asn1_decode_simple_de)q(r)e +Fh(\()p Fg(unsigned)30 b(in)m(t)h Ff(etype)p Fg(,)h(const)f(unsigned) +565 2956 y(c)m(har)f(*)g Ff(der)p Fg(,)h(unsigned)d(in)m(t)j +Ff(_der_len)p Fg(,)h(const)e(unsigned)f(c)m(har)h(**)g +Ff(str)p Fg(,)h(unsigned)d(in)m(t)j(*)565 3065 y Ff(str_len)p +Fh(\))390 3175 y Fg(et)m(yp)s(e)5 b Fr(:)41 b(The)30 +b(t)m(yp)s(e)h(of)f(the)h(string)f(to)h(b)s(e)f(enco)s(ded)g(\(ASN1)p +2444 3175 28 4 v 41 w(ETYPE)p 2805 3175 V 39 w(\))390 +3308 y Fg(der)7 b Fr(:)40 b(the)30 b(enco)s(ded)g(string)p +396 3442 V 430 3442 a Fg(der)p 563 3442 V 40 w(len)p +Fr(:)40 b(the)31 b(b)m(ytes)g(of)f(the)h(enco)s(ded)f(string)390 +3575 y Fg(str)7 b Fr(:)40 b(a)31 b(p)s(oin)m(ter)f(to)h(the)g(data)390 +3709 y Fg(str)p 503 3709 V 40 w(len)p Fr(:)41 b(the)30 +b(length)h(of)g(the)f(data)390 3842 y(Deco)s(des)35 b(a)f(simple)g(DER) +g(enco)s(ded)f(t)m(yp)s(e)h(\(e.g.)52 b(a)35 b(string,)f(whic)m(h)g(is) +g(not)g(constructed\).)51 b(The)390 3952 y(output)30 +b(is)g(a)h(p)s(oin)m(ter)g(inside)f(the)g Fk(der)g Fr(.)390 +4085 y Fe(Returns:)40 b Fk(ASN1_SUCCESS)27 b Fr(if)k(successful)f(or)g +(an)g(error)g(v)-5 b(alue.)150 4283 y Fj(asn1)p 396 4283 +37 5 v 55 w(deco)s(de)p 818 4283 V 54 w(simple)p 1214 +4283 V 55 w(b)s(er)3350 4477 y Fr([F)d(unction])-3599 +b Fi(int)53 b(asn1_decode_simple_be)q(r)e Fh(\()p Fg(unsigned)30 +b(in)m(t)h Ff(etype)p Fg(,)h(const)f(unsigned)565 4587 +y(c)m(har)g(*)g Ff(der)p Fg(,)g(unsigned)e(in)m(t)i Ff(_der_len)p +Fg(,)i(unsigned)d(c)m(har)g(**)h Ff(str)p Fg(,)h(unsigned)d(in)m(t)i(*) +565 4696 y Ff(str_len)p Fg(,)i(unsigned)c(in)m(t)i(*)g +Ff(ber_len)p Fh(\))390 4806 y Fg(et)m(yp)s(e)5 b Fr(:)41 +b(The)30 b(t)m(yp)s(e)h(of)f(the)h(string)f(to)h(b)s(e)f(enco)s(ded)g +(\(ASN1)p 2444 4806 28 4 v 41 w(ETYPE)p 2805 4806 V 39 +w(\))390 4940 y Fg(der)7 b Fr(:)40 b(the)30 b(enco)s(ded)g(string)p +396 5073 V 430 5073 a Fg(der)p 563 5073 V 40 w(len)p +Fr(:)40 b(the)31 b(b)m(ytes)g(of)f(the)h(enco)s(ded)f(string)390 +5206 y Fg(str)7 b Fr(:)40 b(a)31 b(p)s(oin)m(ter)f(to)h(the)g(data)390 +5340 y Fg(str)p 503 5340 V 40 w(len)p Fr(:)41 b(the)30 +b(length)h(of)g(the)f(data)p eop end +%%Page: 22 25 +TeXDict begin 22 24 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(22)390 299 y Fg(b)s(er)p +526 299 28 4 v 39 w(len)p Fr(:)41 b(the)30 b(total)j(length)d(o)s +(ccupied)h(b)m(y)f(BER)g(\(ma)m(y)i(b)s(e)d Fk(NULL)h +Fr(\))390 435 y(Deco)s(des)37 b(a)g(BER)g(enco)s(ded)f(t)m(yp)s(e.)60 +b(The)36 b(output)g(is)g(an)h(allo)s(cated)h(v)-5 b(alue)37 +b(of)g(the)g(data.)60 b(This)390 545 y(deco)s(des)30 +b(BER)h(STRINGS)e(only)-8 b(.)41 b(Other)30 b(t)m(yp)s(es)h(are)f(deco) +s(ded)g(as)h(DER.)390 681 y Fe(Returns:)40 b Fk(ASN1_SUCCESS)27 +b Fr(if)k(successful)f(or)g(an)g(error)g(v)-5 b(alue.)150 +917 y Fq(4.4)68 b(Error)45 b(handling)g(functions)150 +1141 y Fj(asn1)p 396 1141 37 5 v 55 w(p)s(error)3350 +1339 y Fr([F)-8 b(unction])-3599 b Fi(void)54 b(asn1_perror)48 +b Fh(\()p Fg(in)m(t)32 b Ff(error)p Fh(\))390 1449 y +Fg(error)7 b Fr(:)40 b(is)30 b(an)h(error)f(returned)f(b)m(y)h(a)h +(libtasn1)g(function.)390 1585 y(Prin)m(ts)26 b(a)g(string)h(to)f +(stderr)g(with)g(a)g(description)g(of)h(an)f(error.)38 +b(This)26 b(function)g(is)g(lik)m(e)h Fk(perror\(\))390 +1695 y Fr(.)41 b(The)30 b(only)g(di\013erence)h(is)f(that)h(it)g +(accepts)h(an)e(error)g(returned)f(b)m(y)i(a)f(libtasn1)h(function.)390 +1831 y Fe(Since:)41 b Fr(1.6)150 2033 y Fj(asn1)p 396 +2033 V 55 w(strerror)3350 2231 y Fr([F)-8 b(unction])-3599 +b Fi(const)54 b(char)f(*)g(asn1_strerror)c Fh(\()p Fg(in)m(t)32 +b Ff(error)p Fh(\))390 2341 y Fg(error)7 b Fr(:)40 b(is)30 +b(an)h(error)f(returned)f(b)m(y)h(a)h(libtasn1)g(function.)390 +2477 y(Returns)i(a)h(string)g(with)f(a)h(description)g(of)g(an)g +(error.)50 b(This)33 b(function)h(is)g(similar)g(to)g(strerror.)390 +2587 y(The)c(only)h(di\013erence)g(is)g(that)g(it)g(accepts)h(an)e +(error)g(\(n)m(um)m(b)s(er\))g(returned)g(b)m(y)g(a)h(libtasn1)h(func-) +390 2696 y(tion.)390 2833 y Fe(Returns:)40 b Fr(P)m(oin)m(ter)32 +b(to)f(static)h(zero-terminated)g(string)f(describing)f(error)g(co)s +(de.)390 2969 y Fe(Since:)41 b Fr(1.6)150 3205 y Fq(4.5)68 +b(Auxilliary)46 b(functions)150 3429 y Fj(asn1)p 396 +3429 V 55 w(\014nd)p 655 3429 V 54 w(no)s(de)3350 3627 +y Fr([F)-8 b(unction])-3599 b Fi(asn1_node)55 b(asn1_find_node)50 +b Fh(\()p Fg(asn1)p 1669 3627 28 4 v 40 w(no)s(de)30 +b Ff(pointer)p Fg(,)j(const)e(c)m(har)f(*)h Ff(name)p +Fh(\))390 3737 y Fg(p)s(oin)m(ter)7 b Fr(:)40 b(NODE)p +1021 3737 V 40 w(ASN)31 b(elemen)m(t)g(p)s(oin)m(ter.)390 +3873 y Fg(name)5 b Fr(:)41 b(n)m(ull)30 b(terminated)h(string)f(with)g +(the)h(elemen)m(t's)h(name)e(to)i(\014nd.)390 4010 y(Searc)m(hes)g(for) +g(an)g(elemen)m(t)h(called)g Fk(name)e Fr(starting)h(from)f +Fk(pointer)f Fr(.)45 b(The)31 b(name)h(is)g(comp)s(osed)390 +4119 y(b)m(y)39 b(di\013eren)m(ts)g(iden)m(ti\014ers)g(separated)g(b)m +(y)f(dots.)66 b(When)39 b(*)g Fk(pointer)e Fr(has)h(a)i(name,)h(the)e +(\014rst)390 4229 y(iden)m(ti\014er)26 b(m)m(ust)g(b)s(e)g(the)g(name)g +(of)g(*)h Fk(pointer)d Fr(,)j(otherwise)g(it)f(m)m(ust)g(b)s(e)g(the)g +(name)g(of)g(one)h(c)m(hild)390 4339 y(of)k(*)f Fk(pointer)f +Fr(.)390 4475 y Fe(Returns:)40 b Fr(the)31 b(searc)m(h)g(result,)f(or)h +Fk(NULL)e Fr(if)h(not)h(found.)150 4676 y Fj(asn1)p 396 +4676 37 5 v 55 w(c)m(hec)m(k)p 744 4676 V 52 w(v)m(ersion)3350 +4875 y Fr([F)-8 b(unction])-3599 b Fi(const)54 b(char)f(*)g +(asn1_check_version)e Fh(\()p Fg(const)31 b(c)m(har)g(*)g +Ff(req_version)p Fh(\))390 4984 y Fg(req)p 520 4984 28 +4 v 40 w(v)m(ersion)p Fr(:)41 b(Required)30 b(v)m(ersion)h(n)m(um)m(b)s +(er,)e(or)i Fk(NULL)e Fr(.)390 5121 y(Chec)m(k)e(that)h(the)f(v)m +(ersion)g(of)g(the)g(library)g(is)g(at)g(minim)m(um)g(the)g(requested)f +(one)i(and)e(return)g(the)390 5230 y(v)m(ersion)j(string;)g(return)d +Fk(NULL)h Fr(if)h(the)h(condition)f(is)g(not)h(satis\014ed.)40 +b(If)27 b(a)i Fk(NULL)e Fr(is)h(passed)f(to)i(this)390 +5340 y(function,)h(no)h(c)m(hec)m(k)h(is)e(done,)g(but)g(the)h(v)m +(ersion)f(string)h(is)f(simply)g(returned.)p eop end +%%Page: 23 26 +TeXDict begin 23 25 bop 150 -116 a Fr(Chapter)30 b(4:)41 +b(F)-8 b(unction)31 b(reference)2313 b(23)390 299 y(See)31 +b Fk(ASN1_VERSION)c Fr(for)j(a)h(suitable)f Fk(req_version)e +Fr(string.)390 433 y Fe(Returns:)43 b Fr(V)-8 b(ersion)32 +b(string)g(of)g(run-time)f(library)-8 b(,)33 b(or)e Fk(NULL)g +Fr(if)h(the)g(run-time)f(library)g(do)s(es)h(not)390 +543 y(meet)f(the)g(required)e(v)m(ersion)i(n)m(um)m(b)s(er.)p +eop end +%%Page: 24 27 +TeXDict begin 24 26 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(24)150 299 y Fn(App)t(endix)52 +b(A)81 b(Cop)l(ying)52 b(Information)150 608 y Fq(A.1)67 +b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)1359 +767 y Fr(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 +898 y(Cop)m(yrigh)m(t)842 895 y(c)817 898 y Fo(\015)e +Fr(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 +b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 1007 +y Fk(http://fsf.org/)390 1227 y Fr(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f +(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 +1336 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f +(is)f(not)h(allo)m(w)m(ed.)199 1467 y(0.)61 b(PREAMBLE)330 +1597 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g +(a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 +1707 y(useful)29 b(do)s(cumen)m(t)h Fg(free)36 b Fr(in)29 +b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j +(the)e(e\013ectiv)m(e)j(freedom)330 1817 y(to)f(cop)m(y)g(and)f +(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i +(either)f(commercially)h(or)e(non-)330 1926 y(commercially)-8 +b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f +(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2036 +y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g +(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 +2145 y(made)30 b(b)m(y)h(others.)330 2276 y(This)22 b(License)i(is)f(a) +h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 +b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 +2385 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g +(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 +2495 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) +e(for)g(free)h(soft)m(w)m(are.)330 2626 y(W)-8 b(e)31 +b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h +(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 +2735 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) +65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 +2845 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) +m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g +(to)330 2954 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g +(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 +b(ject)30 b(matter)i(or)330 3064 y(whether)f(it)h(is)f(published)f(as)i +(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h +(License)g(principally)f(for)330 3174 y(w)m(orks)f(whose)h(purp)s(ose)d +(is)j(instruction)f(or)g(reference.)199 3304 y(1.)61 +b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3435 y(This)39 +b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i +(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3544 +y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) +h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 +3654 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f +(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d +(in)330 3764 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j +(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 +3873 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h +(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g +(a)h(licensee,)i(and)330 3983 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 +b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 +b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 +4092 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) +m(yrigh)m(t)j(la)m(w.)330 4223 y(A)i(\\Mo)s(di\014ed)f(V)-8 +b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f +(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4333 y(a)k(p)s(ortion)f +(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s +(di\014cations)f(and/or)h(translated)g(in)m(to)330 4442 +y(another)31 b(language.)330 4573 y(A)26 b(\\Secondary)g(Section")h(is) +f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f +(the)g(Do)s(cumen)m(t)330 4682 y(that)c(deals)g(exclusiv)m(ely)h(with)e +(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f +(Do)s(cumen)m(t)330 4792 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m +(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) +m(tains)h(nothing)f(that)330 4902 y(could)j(fall)h(directly)g(within)f +(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 +b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 +5011 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) +h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 +b(The)330 5121 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e +(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 +b(or)g(with)g(related)330 5230 y(matters,)38 b(or)d(of)h(legal,)i +(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s +(osition)f(regarding)330 5340 y(them.)p eop end +%%Page: 25 28 +TeXDict begin 25 27 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(25)330 299 y(The)25 +b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g +(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 +408 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 +b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s +(cumen)m(t)g(is)g(released)330 518 y(under)f(this)i(License.)40 +b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h +(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 628 +y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 +b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) +e(In)m(v)-5 b(arian)m(t)330 737 y(Sections.)39 b(If)25 +b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) +-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 +878 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) +g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 +b(ron)m(t-Co)m(v)m(er)330 988 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) +j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f +(Do)s(cumen)m(t)h(is)f(released)g(under)330 1097 y(this)h(License.)40 +b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 +b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m +(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1207 y(b)s(e)k(at)h(most)g(25)g(w) +m(ords.)330 1348 y(A)36 b(\\T)-8 b(ransparen)m(t")36 +b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m +(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 +1457 y(in)d(a)h(format)g(whose)g(sp)s(eci\014cation)g(is)g(a)m(v)-5 +b(ailable)38 b(to)f(the)f(general)g(public,)h(that)f(is)g(suitable)g +(for)330 1567 y(revising)c(the)g(do)s(cumen)m(t)f(straigh)m(tforw)m +(ardly)i(with)e(generic)i(text)g(editors)f(or)f(\(for)h(images)h(com-) +330 1677 y(p)s(osed)23 b(of)h(pixels\))g(generic)h(pain)m(t)f(programs) +g(or)f(\(for)h(dra)m(wings\))g(some)g(widely)g(a)m(v)-5 +b(ailable)26 b(dra)m(wing)330 1786 y(editor,)k(and)f(that)g(is)g +(suitable)h(for)f(input)f(to)i(text)g(formatters)f(or)g(for)g +(automatic)i(translation)f(to)330 1896 y(a)d(v)-5 b(ariet)m(y)28 +b(of)f(formats)g(suitable)h(for)e(input)g(to)i(text)g(formatters.)40 +b(A)27 b(cop)m(y)g(made)g(in)g(an)g(otherwise)330 2005 +y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g(whose)f(markup,)i(or)e +(absence)h(of)g(markup,)g(has)g(b)s(een)f(arranged)g(to)330 +2115 y(th)m(w)m(art)27 b(or)g(discourage)g(subsequen)m(t)f(mo)s +(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 +b(An)27 b(image)330 2225 y(format)35 b(is)f(not)h(T)-8 +b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g(substan)m(tial)h(amoun) +m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g(is)330 +2334 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i(\\Opaque".)330 +2475 y(Examples)49 b(of)f(suitable)i(formats)f(for)f(T)-8 +b(ransparen)m(t)48 b(copies)i(include)e(plain)h(ASCI)s(I)e(without)330 +2585 y(markup,)33 b(T)-8 b(exinfo)33 b(input)f(format,)i(LaT)1745 +2604 y(E)1795 2585 y(X)f(input)f(format,)j(SGML)d(or)h(XML)h(using)e(a) +h(publicly)330 2694 y(a)m(v)-5 b(ailable)36 b(DTD,)e(and)f +(standard-conforming)h(simple)f(HTML,)h(P)m(ostScript)g(or)g(PDF)g +(designed)330 2804 y(for)h(h)m(uman)g(mo)s(di\014cation.)57 +b(Examples)35 b(of)h(transparen)m(t)f(image)i(formats)f(include)f(PNG,) +h(X)m(CF)330 2913 y(and)h(JPG.)62 b(Opaque)36 b(formats)i(include)f +(proprietary)g(formats)h(that)g(can)g(b)s(e)e(read)i(and)f(edited)330 +3023 y(only)c(b)m(y)g(proprietary)f(w)m(ord)h(pro)s(cessors,)g(SGML)g +(or)g(XML)g(for)g(whic)m(h)g(the)g(DTD)g(and/or)g(pro-)330 +3133 y(cessing)26 b(to)s(ols)g(are)g(not)f(generally)i(a)m(v)-5 +b(ailable,)29 b(and)24 b(the)i(mac)m(hine-generated)h(HTML,)e(P)m +(ostScript)330 3242 y(or)30 b(PDF)h(pro)s(duced)e(b)m(y)h(some)h(w)m +(ord)f(pro)s(cessors)g(for)g(output)g(purp)s(oses)f(only)-8 +b(.)330 3383 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m +(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f +(follo)m(wing)330 3493 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g +(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h +(app)s(ear)f(in)h(the)330 3602 y(title)g(page.)40 b(F)-8 +b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h +(an)m(y)e(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 +3712 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s +(earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 +3821 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 +3962 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) +m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 +4072 y(to)c(the)g(public.)330 4213 y(A)f(section)h(\\En)m(titled)g +(XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h +(whose)e(title)i(either)330 4322 y(is)d(precisely)g(XYZ)g(or)f(con)m +(tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f +(translates)h(XYZ)e(in)330 4432 y(another)e(language.)40 +b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f +(men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4542 y(as)i(\\Ac)m(kno)m +(wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f +(\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4651 +y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s +(dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 +4761 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g +(de\014nition.)330 4902 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) +-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m +(h)e(states)i(that)330 5011 y(this)34 b(License)g(applies)g(to)h(the)f +(Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 +b(Disclaimers)f(are)g(considered)e(to)330 5121 y(b)s(e)k(included)g(b)m +(y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f +(disclaiming)i(w)m(arran)m(ties:)330 5230 y(an)m(y)e(other)g +(implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 +b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 +5340 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)p +eop end +%%Page: 26 29 +TeXDict begin 26 28 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(26)199 299 y(2.)61 +b(VERBA)-8 b(TIM)31 b(COPYING)330 445 y(Y)-8 b(ou)39 +b(ma)m(y)f(cop)m(y)h(and)e(distribute)h(the)g(Do)s(cumen)m(t)h(in)f(an) +m(y)g(medium,)h(either)g(commercially)h(or)330 555 y(noncommercially)-8 +b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 +b(cop)m(yrigh)m(t)i(notices,)j(and)42 b(the)h(license)330 +664 y(notice)37 b(sa)m(ying)g(this)e(License)i(applies)e(to)i(the)f(Do) +s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g(copies,)j(and)330 +774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f(conditions)h(whatso)s(ev)m +(er)h(to)f(those)g(of)g(this)f(License.)40 b(Y)-8 b(ou)27 +b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)35 b(measures)d(to)i +(obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g(further)e(cop)m +(ying)j(of)f(the)g(copies)330 993 y(y)m(ou)25 b(mak)m(e)g(or)g +(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h +(comp)s(ensation)f(in)f(exc)m(hange)j(for)d(copies.)330 +1103 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f(n)m(um)m(b)s +(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g(the)f +(conditions)330 1212 y(in)e(section)i(3.)330 1358 y(Y)-8 +b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g +(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g +(publicly)330 1468 y(displa)m(y)31 b(copies.)199 1614 +y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1760 y(If)25 +b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g +(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 +1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f +(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 +1979 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i +(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 +b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 2089 y(these)j(Co)m(v)m +(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 +b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 +b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 +2198 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) +m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f +(the)h(publisher)330 2308 y(of)k(these)h(copies.)53 b(The)34 +b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i +(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2418 y(equally)e +(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g +(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 +2527 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) +m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) +330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d +(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 +2746 y(resp)s(ects.)330 2892 y(If)32 b(the)h(required)f(texts)i(for)e +(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g +(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 3002 y(the)h(\014rst)f +(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) +g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 +3112 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3258 +y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f +(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 +3367 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g +(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) +330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h +(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d +(whic)m(h)330 3587 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e +(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m +(ork)330 3696 y(proto)s(cols)40 b(a)f(complete)h(T)-8 +b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g +(added)f(material.)67 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)h +(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e +(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)f(of)g +(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 +b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 +4025 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s +(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h +(time)330 4134 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i +(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h +(of)f(that)330 4244 y(edition)31 b(to)g(the)g(public.)330 +4390 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g +(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 +4500 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s +(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m +(vide)g(y)m(ou)330 4609 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g +(the)f(Do)s(cumen)m(t.)199 4756 y(4.)61 b(MODIFICA)-8 +b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) +h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) +e(the)h(conditions)330 5011 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) +m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f +(V)-8 b(ersion)22 b(under)d(precisely)330 5121 y(this)29 +b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 +b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f +(licensing)330 5230 y(distribution)k(and)h(mo)s(di\014cation)g(of)h +(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s +(ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)41 b(In)30 +b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s +(di\014ed)e(V)-8 b(ersion:)p eop end +%%Page: 27 30 +TeXDict begin 27 29 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(27)357 299 y(A.)60 +b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m +(ers,)i(if)e(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the) +510 408 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m +(ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 +b(,)510 518 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g +(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) +h(title)h(as)510 628 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) +i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 +758 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h +(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c +(for)510 867 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g +(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h +(\014v)m(e)510 977 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s +(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g +(few)m(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g +(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1217 y(C.)60 +b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g +(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 +b(as)f(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31 +b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) +363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i +(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g +(other)510 1696 y(cop)m(yrigh)m(t)g(notices.)365 1826 +y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g +(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 +1936 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g +(form)510 2045 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 +2176 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f +(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e +(required)g(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)g(in)f +(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2415 +y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) +392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g +(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g +(item)510 2655 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d +(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 +b(ersion)510 2765 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 +b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e +(the)g(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f +(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s +(cumen)m(t)510 2984 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i +(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)37 b(as)510 3093 y(stated)31 b(in)f(the)h(previous)f(sen)m +(tence.)378 3224 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s +(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m +(t)h(for)g(public)e(access)j(to)510 3333 y(a)e(T)-8 b(ransparen)m(t)30 +b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) +m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3443 y(the)g(Do)s(cumen)m +(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 +b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3552 +y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) +m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h +(published)510 3662 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e +(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) +d(of)i(the)510 3771 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s +(ermission.)354 3902 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m +(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k +(Preserv)m(e)c(the)g(Title)510 4011 y(of)j(the)f(section,)j(and)d +(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) +h(of)f(eac)m(h)i(of)f(the)510 4121 y(con)m(tributor)k(ac)m(kno)m +(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 +4251 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f +(in)f(their)g(text)i(and)510 4361 y(in)f(their)g(titles.)58 +b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 +b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 +4470 y(section)c(titles.)341 4600 y(M.)61 b(Delete)33 +b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 +b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 +4710 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 +4840 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f +(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g +(in)510 4950 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 +b(Section.)354 5080 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)g +(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f +(app)s(endices)g(that)h(qualify)330 5340 y(as)28 b(Secondary)g +(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h +(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop end +%%Page: 28 31 +TeXDict begin 28 30 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(28)330 299 y(y)m(our)32 +b(option)h(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e +(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)330 +408 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 +b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 +b(license)g(notice.)57 b(These)330 518 y(titles)32 b(m)m(ust)e(b)s(e)g +(distinct)h(from)e(an)m(y)i(other)g(section)g(titles.)330 +650 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)i(En)m(titled)f +(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g(nothing)g(but) +330 759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)g(V)-8 +b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g +(statemen)m(ts)i(of)330 869 y(p)s(eer)27 b(review)g(or)g(that)h(the)f +(text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)h +(as)e(the)h(authoritativ)m(e)330 978 y(de\014nition)i(of)h(a)f +(standard.)330 1110 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g +(up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er) +30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 +1219 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 +b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 +b(exts)27 b(in)g(the)h(Mo)s(di\014ed)330 1329 y(V)-8 +b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m +(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8 +b(ext)36 b(ma)m(y)h(b)s(e)330 1439 y(added)27 b(b)m(y)g(\(or)h(through) +f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8 +b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1548 +y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m +(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m +(t)330 1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)i(y)m(ou)f(are)f +(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g(not)f(add)g +(another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)g(the)f(old)g +(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e +(publisher)f(that)330 1877 y(added)e(the)g(old)h(one.)330 +2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s +(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s +(ermission)330 2118 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g +(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g +(Mo)s(di\014ed)330 2228 y(V)-8 b(ersion.)199 2359 y(5.)61 +b(COMBINING)31 b(DOCUMENTS)330 2491 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m +(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h +(released)g(under)f(this)g(License,)330 2600 y(under)f(the)h(terms)g +(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f +(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2710 +y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s +(cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g +(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) +g(w)m(ork)f(in)h(its)g(license)330 2929 y(notice,)32 +b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)g(w)m +(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) +i(and)d(m)m(ultiple)i(iden)m(tical)330 3170 y(In)m(v)-5 +b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h +(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m +(v)-5 b(arian)m(t)330 3280 y(Sections)27 b(with)g(the)g(same)g(name)g +(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f +(eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)33 b(b)m(y)h(adding)f +(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g +(the)g(original)h(author)f(or)330 3499 y(publisher)23 +b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m +(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 +3608 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h +(com)m(bined)330 3718 y(w)m(ork.)330 3850 y(In)41 b(the)g(com)m +(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g +(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 +3959 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h +(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 +4069 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 +b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 +b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m +(titled)f(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28 +b(OF)i(DOCUMENTS)330 4441 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f +(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g +(do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)h(License,)k +(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f +(the)h(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) +g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 +b(pro)m(vided)42 b(that)i(y)m(ou)330 4770 y(follo)m(w)38 +b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g +(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 +4880 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 +b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h +(collection,)i(and)d(distribute)g(it)h(individu-)330 +5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g +(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 +5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g +(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 +5340 y(that)d(do)s(cumen)m(t.)p eop end +%%Page: 29 32 +TeXDict begin 29 31 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(29)199 299 y(7.)61 +b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 +441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 +b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 +551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m +(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called) +330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e +(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 +770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m +(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 +b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g +(aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g +(other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h +(not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h +(Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 +b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f +(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 +y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f +(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m +(er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m +(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h +(aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 +b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f +(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 +1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f +(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 +b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) +i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e +(translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h +(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 +b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f +(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i +(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 +b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 +b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 +2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 +b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f +(License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) +h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 +b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 +y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g +(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 +2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 +b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f +(translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f +(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m +(ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 +b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m +(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 +3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m +(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 +3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 +b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 +b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h +(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 +b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g +(cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 +3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) +i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 +3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i +(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h +(particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h +(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g +(cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h +(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 +b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 +b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h +(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 +y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d +(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h +(reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h +(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g +(reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m +(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f +(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 +4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g +(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h +(of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 +b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h +(terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 +b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g +(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) +330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g +(reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f +(the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f +(an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end +%%Page: 30 33 +TeXDict begin 30 32 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(30)154 299 y(10.)61 +b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 +y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 +b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g(the)g(GNU)g(F) +-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to) +g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h +(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m +(y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i +(concerns.)330 762 y(See)c Fk(http://www.gnu.org/copy)o(left)o(/)p +Fr(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m +(en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 +b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 +b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g +(License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 +y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f +(follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 +1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m +(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g +(b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 +b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s +(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 +y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m +(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) +h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 +b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f +(can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f +(License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) +m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m +(tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g +(for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 +2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) +e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 +2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m +(table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h +(facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g +(w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i +(edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 +b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s +(oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 +2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m +(orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 +2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m +(ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 +2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) +g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 +2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 +b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) +f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g +(organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e +(or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h +(as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 +3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h +(licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 +3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h +(License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 +3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f +(part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) +330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j +(w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s +(er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h +(Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) +g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g +(time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) +330 4005 y(eligible)h(for)e(relicensing.)p eop end +%%Page: 31 34 +TeXDict begin 31 33 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(Cop)m(ying)h(Information)2140 b(31)150 299 y Fq(ADDENDUM:)45 +b(Ho)l(w)h(to)f(use)g(this)h(License)f(for)g(y)l(our)g(do)t(cumen)l(ts) +150 458 y Fr(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m +(t)g(y)m(ou)f(ha)m(v)m(e)i(written,)g(include)f(a)f(cop)m(y)i(of)f(the) +f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g +(follo)m(wing)i(cop)m(yrigh)m(t)g(and)e(license)h(notices)g(just)f +(after)h(the)g(title)h(page:)468 680 y Fd(Copyright)42 +b(\(C\))79 b Fc(year)g(your)40 b(name)p Fd(.)468 767 +y(Permission)i(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g +(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g +(GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.3)468 +941 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g +(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f +(no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)468 +1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f(license)i(is)f(included)h +(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation) +h(License''.)275 1337 y Fr(If)d(y)m(ou)h(ha)m(v)m(e)h(In)m(v)-5 +b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 +b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts,)43 +b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 +b(T)-8 b(exts.")31 b(line)g(with)f(this:)547 1559 y Fd(with)40 +b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p +Fd(,)h(with)547 1646 y(the)f(Front-Cover)i(Texts)e(being)g +Fc(list)p Fd(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 +1733 y(being)f Fc(list)p Fd(.)275 1868 y Fr(If)34 b(y)m(ou)i(ha)m(v)m +(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 +b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 +1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e +(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f +(con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m +(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g +(parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h +(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 +b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m +(w)m(are.)p eop end +%%Page: 32 35 +TeXDict begin 32 34 bop 150 -116 a Fr(Concept)31 b(Index)2927 +b(32)150 299 y Fn(Concept)52 b(Index)150 638 y Fq(A)150 +758 y Fb(asn1Co)r(ding)27 b(program)10 b Fa(:)k(:)f(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)37 b Fb(5)150 846 y(asn1Deco)r(ding)27 b(program)8 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(6)150 +935 y(asn1P)n(arser)27 b(program)7 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)33 b Fb(5)150 1024 y(ASN.1)25 b(sc)n(hema)14 +b Fa(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 +b Fb(2)150 1266 y Fq(F)150 1385 y Fb(FDL,)26 b(GNU)f(F)-6 +b(ree)25 b(Do)r(cumen)n(tation)h(License)20 b Fa(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)45 b Fb(24)150 1474 y(F)-6 b(uture)25 +b(dev)n(elopmen)n(ts)9 b Fa(:)k(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 +b Fb(4)150 1733 y Fq(H)150 1852 y Fb(Header)26 b(\014le)f(libtasn1.h)18 +b Fa(:)d(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)45 b Fb(4)2025 +638 y Fq(M)2025 759 y Fb(Main)26 b(t)n(yp)r(e)f(asn1)p +2550 759 24 4 v 34 w(no)r(de)19 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)46 b Fb(4)2025 1021 y Fq(P)2025 1141 y Fb(P)n(orting)12 +b Fa(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(1)2025 1403 y Fq(S)2025 +1524 y Fb(Supp)r(orted)24 b(ASN.1)h(t)n(yp)r(es,)h(list)g(of)14 +b Fa(:)g(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)41 b Fb(2)2025 1785 y Fq(T)2025 1906 y Fb(threads)13 +b Fa(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(1)p eop end +%%Page: 33 36 +TeXDict begin 33 35 bop 150 -116 a Fr(F)-8 b(unction)31 +b(and)f(Data)i(Index)2503 b(33)150 299 y Fn(F)-13 b(unction)52 +b(and)h(Data)i(Index)150 610 y Fd(asn1_array2tree)13 +b Fa(:)k(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 +b Fb(9)150 697 y Fd(asn1_bit_der)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(16)150 785 y +Fd(asn1_check_version)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 +b Fb(22)150 872 y Fd(asn1_copy_node)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(11)150 959 y Fd(asn1_create_element)18 +b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(10)150 1046 +y Fd(asn1_decode_simple_ber)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 +b Fb(21)150 1133 y Fd(asn1_decode_simple_der)10 b Fa(:)19 +b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)37 b Fb(21)150 1220 y Fd(asn1_delete_element)25 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(9)150 +1308 y Fd(asn1_delete_structure)15 b Fa(:)j(:)13 b(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 +b Fb(9)150 1395 y Fd(asn1_delete_structure2)13 b Fa(:)18 +b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)40 b Fb(9)150 1482 y Fd(asn1_der_coding)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(16)150 1569 y Fd(asn1_der_decoding)6 b Fa(:)17 b(:)c(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)32 b Fb(19)150 1656 y Fd(asn1_der_decoding_element) +26 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)46 b Fb(19)150 1743 y Fd(asn1_der_decoding_startEnd)18 +b Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +44 b Fb(20)150 1831 y Fd(asn1_der_decoding2)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(19)150 1918 y +Fd(asn1_dup_node)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)43 b Fb(11)150 2005 y Fd(asn1_encode_simple_der)10 +b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(16)150 2092 y Fd +(asn1_expand_any_defined_by)18 b Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(20)150 2179 y +Fd(asn1_expand_octet_string)28 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(21)150 +2267 y Fd(asn1_find_node)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)40 b Fb(22)2025 610 y Fd(asn1_find_structure_from_oid)13 +b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 +b Fb(10)2025 697 y Fd(asn1_get_bit_der)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(18)2025 785 y Fd(asn1_get_length_ber)18 +b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(17)2025 872 y +Fd(asn1_get_length_der)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 +b Fb(17)2025 959 y Fd(asn1_get_object_id_der)10 b Fa(:)18 +b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)37 b Fb(18)2025 1046 y Fd(asn1_get_octet_der)25 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(18)2025 +1133 y Fd(asn1_get_tag_der)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)35 b Fb(17)2025 1220 y Fd(asn1_length_der)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(15)2025 1308 y Fd(asn1_number_of_elements)8 b Fa(:)18 +b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)34 b Fb(10)2025 1395 y Fd(asn1_octet_der)14 +b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 +b Fb(15)2025 1482 y Fd(asn1_parser2array)8 b Fa(:)17 +b(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)35 b Fb(8)2025 +1569 y Fd(asn1_parser2tree)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)38 b Fb(8)2025 1656 y Fd(asn1_perror)24 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +48 b Fb(22)2025 1743 y Fd(asn1_print_structure)16 b Fa(:)h(:)c(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)42 b Fb(10)2025 1831 y Fd(asn1_read_node_value)16 +b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(15)2025 1918 y Fd(asn1_read_tag)16 +b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 +b Fb(15)2025 2005 y Fd(asn1_read_value)11 b Fa(:)17 b(:)c(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 b Fb(13)2025 2092 y Fd +(asn1_read_value_type)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 +b Fb(14)2025 2179 y Fd(asn1_strerror)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(22)2025 2267 y +Fd(asn1_write_value)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)35 b Fb(11)p eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/libtasn1.texi b/doc/libtasn1.texi index 607bd56..7fabd21 100644 --- a/doc/libtasn1.texi +++ b/doc/libtasn1.texi @@ -15,7 +15,7 @@ This manual is for GNU Libtasn1 which is a library for Abstract Syntax Notation One (ASN.1) and Distinguished Encoding Rules (DER) manipulation. -Copyright @copyright{} 2001-2014 Free Software Foundation, Inc. +Copyright @copyright{} 2001-2015 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -363,15 +363,24 @@ Options: For example, consider an ASN.1 definitions file as follows: @verbatim -PKIX1 { } +MYPKIX1 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN +OtherStruct := SEQUENCE { + x INTEGER, + y CHOICE { + y1 INTEGER, + y2 OCTET STRING }, +} + Dss-Sig-Value ::= SEQUENCE { r INTEGER, - s INTEGER + s INTEGER, + other OtherStruct + z INTEGER OPTIONAL, } END @@ -380,10 +389,14 @@ END And a assignments file as follows: @verbatim -dp PKIX1.Dss-Sig-Value +dp MYPKIX1.Dss-Sig-Value r 42 s 47 +other.x 66 +other.y y1 +other.y.y1 15 +z (NULL) @end verbatim Running the command below will generate a @file{assign.out} file, diff --git a/doc/man/asn1_array2tree.3 b/doc/man/asn1_array2tree.3 new file mode 100644 index 0000000..90120e0 --- /dev/null +++ b/doc/man/asn1_array2tree.3 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_array2tree" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_array2tree \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_array2tree(const asn1_static_node * " array ", asn1_node * " definitions ", char * " errorDescription ");" +.SH ARGUMENTS +.IP "const asn1_static_node * array" 12 +specify the array that contains ASN.1 declarations +.IP "asn1_node * definitions" 12 +return the pointer to the structure created by +*ARRAY ASN.1 declarations +.IP "char * errorDescription" 12 +return the error description. +.SH "DESCRIPTION" +Creates the structures needed to manage the ASN.1 definitions. + \fIarray\fP is a vector created by \fBasn1_parser2array()\fP. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if structure was created correctly, +\fBASN1_ELEMENT_NOT_EMPTY\fP if * \fIdefinitions\fP not NULL, +\fBASN1_IDENTIFIER_NOT_FOUND\fP if in the file there is an identifier +that is not defined (see \fIerrorDescription\fP for more information), +\fBASN1_ARRAY_ERROR\fP if the array pointed by \fIarray\fP is wrong. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_bit_der.3 b/doc/man/asn1_bit_der.3 new file mode 100644 index 0000000..9f1553f --- /dev/null +++ b/doc/man/asn1_bit_der.3 @@ -0,0 +1,51 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_bit_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_bit_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "void asn1_bit_der(const unsigned char * " str ", int " bit_len ", unsigned char * " der ", int * " der_len ");" +.SH ARGUMENTS +.IP "const unsigned char * str" 12 +BIT string. +.IP "int bit_len" 12 +number of meaningful bits in STR. +.IP "unsigned char * der" 12 +string returned. +.IP "int * der_len" 12 +number of meaningful bytes of DER +(der[0]..der[ans_len\-1]). +.SH "DESCRIPTION" +Creates a length\-value DER encoding for the input data +as it would have been for a BIT STRING. +The DER encoded data will be copied in \fIder\fP . + +Note that the BIT STRING tag is not included in the output. + +This function does not return any value because it is expected +that \fIder_len\fP will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +\fBasn1_length_der()\fP. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_check_version.3 b/doc/man/asn1_check_version.3 new file mode 100644 index 0000000..4d567af --- /dev/null +++ b/doc/man/asn1_check_version.3 @@ -0,0 +1,43 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_check_version" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_check_version \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "const char * asn1_check_version(const char * " req_version ");" +.SH ARGUMENTS +.IP "const char * req_version" 12 +Required version number, or \fBNULL\fP. +.SH "DESCRIPTION" +Check that the version of the library is at minimum the +requested one and return the version string; return \fBNULL\fP if the +condition is not satisfied. If a \fBNULL\fP is passed to this function, +no check is done, but the version string is simply returned. + +See \fBASN1_VERSION\fP for a suitable \fIreq_version\fP string. +.SH "RETURNS" +Version string of run\-time library, or \fBNULL\fP if the +run\-time library does not meet the required version number. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_copy_node.3 b/doc/man/asn1_copy_node.3 new file mode 100644 index 0000000..45dbb94 --- /dev/null +++ b/doc/man/asn1_copy_node.3 @@ -0,0 +1,44 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_copy_node" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_copy_node \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_copy_node(asn1_node " dst ", const char * " dst_name ", asn1_node " src ", const char * " src_name ");" +.SH ARGUMENTS +.IP "asn1_node dst" 12 +Destination asn1 node. +.IP "const char * dst_name" 12 +Field name in destination node. +.IP "asn1_node src" 12 +Source asn1 node. +.IP "const char * src_name" 12 +Field name in source node. +.SH "DESCRIPTION" +Create a deep copy of a asn1_node variable. That +function requires \fIdst\fP to be expanded using \fBasn1_create_element()\fP. +.SH "RETURNS" +Return \fBASN1_SUCCESS\fP on success. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_create_element.3 b/doc/man/asn1_create_element.3 new file mode 100644 index 0000000..31ec7d6 --- /dev/null +++ b/doc/man/asn1_create_element.3 @@ -0,0 +1,46 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_create_element" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_create_element \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_create_element(asn1_node " definitions ", const char * " source_name ", asn1_node * " element ");" +.SH ARGUMENTS +.IP "asn1_node definitions" 12 +pointer to the structure returned by "parser_asn1" function +.IP "const char * source_name" 12 +the name of the type of the new structure (must be +inside p_structure). +.IP "asn1_node * element" 12 +pointer to the structure created. +.SH "DESCRIPTION" +Creates a structure of type \fIsource_name\fP . Example using +"pkix.asn": + +rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); +.SH "RETURNS" +\fBASN1_SUCCESS\fP if creation OK, \fBASN1_ELEMENT_NOT_FOUND\fP if + \fIsource_name\fP is not known. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_decode_simple_ber.3 b/doc/man/asn1_decode_simple_ber.3 new file mode 100644 index 0000000..ee34c13 --- /dev/null +++ b/doc/man/asn1_decode_simple_ber.3 @@ -0,0 +1,49 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_decode_simple_ber" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_decode_simple_ber \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_decode_simple_ber(unsigned int " etype ", const unsigned char * " der ", unsigned int " _der_len ", unsigned char ** " str ", unsigned int * " str_len ", unsigned int * " ber_len ");" +.SH ARGUMENTS +.IP "unsigned int etype" 12 +The type of the string to be encoded (ASN1_ETYPE_) +.IP "const unsigned char * der" 12 +the encoded string +.IP "unsigned int _der_len" 12 +the bytes of the encoded string +.IP "unsigned char ** str" 12 +a pointer to the data +.IP "unsigned int * str_len" 12 +the length of the data +.IP "unsigned int * ber_len" 12 +the total length occupied by BER (may be \fBNULL\fP) +.SH "DESCRIPTION" +Decodes a BER encoded type. The output is an allocated value +of the data. This decodes BER STRINGS only. Other types are +decoded as DER. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful or an error value. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_decode_simple_der.3 b/doc/man/asn1_decode_simple_der.3 new file mode 100644 index 0000000..4b2a831 --- /dev/null +++ b/doc/man/asn1_decode_simple_der.3 @@ -0,0 +1,46 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_decode_simple_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_decode_simple_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_decode_simple_der(unsigned int " etype ", const unsigned char * " der ", unsigned int " _der_len ", const unsigned char ** " str ", unsigned int * " str_len ");" +.SH ARGUMENTS +.IP "unsigned int etype" 12 +The type of the string to be encoded (ASN1_ETYPE_) +.IP "const unsigned char * der" 12 +the encoded string +.IP "unsigned int _der_len" 12 +the bytes of the encoded string +.IP "const unsigned char ** str" 12 +a pointer to the data +.IP "unsigned int * str_len" 12 +the length of the data +.SH "DESCRIPTION" +Decodes a simple DER encoded type (e.g. a string, which is not constructed). +The output is a pointer inside the \fIder\fP . +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful or an error value. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_delete_element.3 b/doc/man/asn1_delete_element.3 new file mode 100644 index 0000000..7925087 --- /dev/null +++ b/doc/man/asn1_delete_element.3 @@ -0,0 +1,41 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_delete_element" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_delete_element \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_delete_element(asn1_node " structure ", const char * " element_name ");" +.SH ARGUMENTS +.IP "asn1_node structure" 12 +pointer to the structure that contains the element you +want to delete. +.IP "const char * element_name" 12 +element's name you want to delete. +.SH "DESCRIPTION" +Deletes the element named * \fIelement_name\fP inside * \fIstructure\fP . +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if +the \fIelement_name\fP was not found. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_delete_structure.3 b/doc/man/asn1_delete_structure.3 new file mode 100644 index 0000000..7b15c2a --- /dev/null +++ b/doc/man/asn1_delete_structure.3 @@ -0,0 +1,39 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_delete_structure" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_delete_structure \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_delete_structure(asn1_node * " structure ");" +.SH ARGUMENTS +.IP "asn1_node * structure" 12 +pointer to the structure that you want to delete. +.SH "DESCRIPTION" +Deletes the structure * \fIstructure\fP . At the end, * \fIstructure\fP is set +to NULL. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if +* \fIstructure\fP was NULL. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_delete_structure2.3 b/doc/man/asn1_delete_structure2.3 new file mode 100644 index 0000000..c1e1b26 --- /dev/null +++ b/doc/man/asn1_delete_structure2.3 @@ -0,0 +1,41 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_delete_structure2" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_delete_structure2 \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_delete_structure2(asn1_node * " structure ", unsigned int " flags ");" +.SH ARGUMENTS +.IP "asn1_node * structure" 12 +pointer to the structure that you want to delete. +.IP "unsigned int flags" 12 +additional flags (see \fBASN1_DELETE_FLAG\fP) +.SH "DESCRIPTION" +Deletes the structure * \fIstructure\fP . At the end, * \fIstructure\fP is set +to NULL. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if +* \fIstructure\fP was NULL. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_der_coding.3 b/doc/man/asn1_der_coding.3 new file mode 100644 index 0000000..7880f70 --- /dev/null +++ b/doc/man/asn1_der_coding.3 @@ -0,0 +1,53 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_der_coding" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_der_coding \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_der_coding(asn1_node " element ", const char * " name ", void * " ider ", int * " len ", char * " ErrorDescription ");" +.SH ARGUMENTS +.IP "asn1_node element" 12 +pointer to an ASN1 element +.IP "const char * name" 12 +the name of the structure you want to encode (it must be +inside *POINTER). +.IP "void * ider" 12 +vector that will contain the DER encoding. DER must be a +pointer to memory cells already allocated. +.IP "int * len" 12 +number of bytes of * \fIider\fP : \fIider\fP [0].. \fIider\fP [len\-1], Initialy +holds the sizeof of der vector. +.IP "char * ErrorDescription" 12 +return the error description or an empty +string if success. +.SH "DESCRIPTION" +Creates the DER encoding for the NAME structure (inside *POINTER +structure). +.SH "RETURNS" +\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP +if \fIname\fP is not a valid element, \fBASN1_VALUE_NOT_FOUND\fP if there +is an element without a value, \fBASN1_MEM_ERROR\fP if the \fIider\fP vector isn't big enough and in this case \fIlen\fP will contain the +length needed. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_der_decoding.3 b/doc/man/asn1_der_decoding.3 new file mode 100644 index 0000000..84cd185 --- /dev/null +++ b/doc/man/asn1_der_decoding.3 @@ -0,0 +1,52 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_der_decoding" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_der_decoding \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_der_decoding(asn1_node * " element ", const void * " ider ", int " ider_len ", char * " errorDescription ");" +.SH ARGUMENTS +.IP "asn1_node * element" 12 +pointer to an ASN1 structure. +.IP "const void * ider" 12 +vector that contains the DER encoding. +.IP "int ider_len" 12 +number of bytes of * \fIider\fP : \fIider\fP [0].. \fIider\fP [len\-1]. +.IP "char * errorDescription" 12 +null\-terminated string contains details when an +error occurred. +.SH "DESCRIPTION" +Fill the structure * \fIelement\fP with values of a DER encoding +string. The structure must just be created with function +\fBasn1_create_element()\fP. + +Note that the * \fIelement\fP variable is provided as a pointer for +historical reasons. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP +if \fIELEMENT\fP is \fBNULL\fP, and \fBASN1_TAG_ERROR\fP or +\fBASN1_DER_ERROR\fP if the der encoding doesn't match the structure +name (* \fIELEMENT\fP deleted). +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_der_decoding2.3 b/doc/man/asn1_der_decoding2.3 new file mode 100644 index 0000000..d88bc21 --- /dev/null +++ b/doc/man/asn1_der_decoding2.3 @@ -0,0 +1,59 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_der_decoding2" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_der_decoding2 \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_der_decoding2(asn1_node * " element ", const void * " ider ", int * " max_ider_len ", unsigned int " flags ", char * " errorDescription ");" +.SH ARGUMENTS +.IP "asn1_node * element" 12 +pointer to an ASN1 structure. +.IP "const void * ider" 12 +vector that contains the DER encoding. +.IP "int * max_ider_len" 12 +pointer to an integer giving the information about the +maximal number of bytes occupied by * \fIider\fP . The real size of the DER +encoding is returned through this pointer. +.IP "unsigned int flags" 12 +flags controlling the behaviour of the function. +.IP "char * errorDescription" 12 +null\-terminated string contains details when an +error occurred. +.SH "DESCRIPTION" +Fill the structure * \fIelement\fP with values of a DER encoding string. The +structure must just be created with function \fBasn1_create_element()\fP. + +If \fBASN1_DECODE_FLAG_ALLOW_PADDING\fP flag is set then the function will ignore +padding after the decoded DER data. Upon a successful return the value of +* \fImax_ider_len\fP will be set to the number of bytes decoded. + +If \fBASN1_DECODE_FLAG_STRICT_DER\fP flag is set then the function will +not decode any BER\-encoded elements. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP +if \fIELEMENT\fP is \fBNULL\fP, and \fBASN1_TAG_ERROR\fP or +\fBASN1_DER_ERROR\fP if the der encoding doesn't match the structure +name (* \fIELEMENT\fP deleted). +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_der_decoding_element.3 b/doc/man/asn1_der_decoding_element.3 new file mode 100644 index 0000000..7c020de --- /dev/null +++ b/doc/man/asn1_der_decoding_element.3 @@ -0,0 +1,57 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_der_decoding_element" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_der_decoding_element \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_der_decoding_element(asn1_node * " structure ", const char * " elementName ", const void * " ider ", int " len ", char * " errorDescription ");" +.SH ARGUMENTS +.IP "asn1_node * structure" 12 +pointer to an ASN1 structure +.IP "const char * elementName" 12 +name of the element to fill +.IP "const void * ider" 12 +vector that contains the DER encoding of the whole structure. +.IP "int len" 12 +number of bytes of *der: der[0]..der[len\-1] +.IP "char * errorDescription" 12 +null\-terminated string contains details when an +error occurred. +.SH "DESCRIPTION" +Fill the element named \fIELEMENTNAME\fP with values of a DER encoding +string. The structure must just be created with function +\fBasn1_create_element()\fP. The DER vector must contain the encoding +string of the whole \fISTRUCTURE\fP . If an error occurs during the +decoding procedure, the * \fISTRUCTURE\fP is deleted and set equal to +\fBNULL\fP. + +This function is deprecated and may just be an alias to asn1_der_decoding +in future versions. Use \fBasn1_der_decoding()\fP instead. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP +if ELEMENT is \fBNULL\fP or \fIelementName\fP == NULL, and +\fBASN1_TAG_ERROR\fP or \fBASN1_DER_ERROR\fP if the der encoding doesn't +match the structure \fIstructure\fP (*ELEMENT deleted). +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_der_decoding_startEnd.3 b/doc/man/asn1_der_decoding_startEnd.3 new file mode 100644 index 0000000..1974fa4 --- /dev/null +++ b/doc/man/asn1_der_decoding_startEnd.3 @@ -0,0 +1,62 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_der_decoding_startEnd" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_der_decoding_startEnd \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_der_decoding_startEnd(asn1_node " element ", const void * " ider ", int " ider_len ", const char * " name_element ", int * " start ", int * " end ");" +.SH ARGUMENTS +.IP "asn1_node element" 12 +pointer to an ASN1 element +.IP "const void * ider" 12 +vector that contains the DER encoding. +.IP "int ider_len" 12 +number of bytes of * \fIider\fP : \fIider\fP [0].. \fIider\fP [len\-1] +.IP "const char * name_element" 12 +an element of NAME structure. +.IP "int * start" 12 +the position of the first byte of NAME_ELEMENT decoding +( \fIider\fP [*start]) +.IP "int * end" 12 +the position of the last byte of NAME_ELEMENT decoding +( \fIider\fP [*end]) +.SH "DESCRIPTION" +Find the start and end point of an element in a DER encoding +string. I mean that if you have a der encoding and you have already +used the function \fBasn1_der_decoding()\fP to fill a structure, it may +happen that you want to find the piece of string concerning an +element of the structure. + +One example is the sequence "tbsCertificate" inside an X509 +certificate. + +Note that since libtasn1 3.7 the \fIider\fP and \fIider_len\fP parameters +can be omitted, if the element is already decoded using \fBasn1_der_decoding()\fP. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP +if ELEMENT is \fBasn1_node\fP EMPTY or \fIname_element\fP is not a valid +element, \fBASN1_TAG_ERROR\fP or \fBASN1_DER_ERROR\fP if the der encoding +doesn't match the structure ELEMENT. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_dup_node.3 b/doc/man/asn1_dup_node.3 new file mode 100644 index 0000000..5a86b2e --- /dev/null +++ b/doc/man/asn1_dup_node.3 @@ -0,0 +1,40 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_dup_node" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_dup_node \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "asn1_node asn1_dup_node(asn1_node " src ", const char * " src_name ");" +.SH ARGUMENTS +.IP "asn1_node src" 12 +Source asn1 node. +.IP "const char * src_name" 12 +Field name in source node. +.SH "DESCRIPTION" +Create a deep copy of a asn1_node variable. This function +will return an exact copy of the provided structure. +.SH "RETURNS" +Return \fBNULL\fP on failure. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_encode_simple_der.3 b/doc/man/asn1_encode_simple_der.3 new file mode 100644 index 0000000..62c2a25 --- /dev/null +++ b/doc/man/asn1_encode_simple_der.3 @@ -0,0 +1,50 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_encode_simple_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_encode_simple_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_encode_simple_der(unsigned int " etype ", const unsigned char * " str ", unsigned int " str_len ", unsigned char * " tl ", unsigned int * " tl_len ");" +.SH ARGUMENTS +.IP "unsigned int etype" 12 +The type of the string to be encoded (ASN1_ETYPE_) +.IP "const unsigned char * str" 12 +the string data. +.IP "unsigned int str_len" 12 +the string length +.IP "unsigned char * tl" 12 +the encoded tag and length +.IP "unsigned int * tl_len" 12 +the bytes of the \fItl\fP field +.SH "DESCRIPTION" +Creates the DER encoding for various simple ASN.1 types like strings etc. +It stores the tag and length in \fItl\fP , which should have space for at least +\fBASN1_MAX_TL_SIZE\fP bytes. Initially \fItl_len\fP should contain the size of \fItl\fP . + +The complete DER encoding should consist of the value in \fItl\fP appended +with the provided \fIstr\fP . +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful or an error value. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_expand_any_defined_by.3 b/doc/man/asn1_expand_any_defined_by.3 new file mode 100644 index 0000000..aa0e79e --- /dev/null +++ b/doc/man/asn1_expand_any_defined_by.3 @@ -0,0 +1,46 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_expand_any_defined_by" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_expand_any_defined_by \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_expand_any_defined_by(asn1_node " definitions ", asn1_node * " element ");" +.SH ARGUMENTS +.IP "asn1_node definitions" 12 +ASN1 definitions +.IP "asn1_node * element" 12 +pointer to an ASN1 structure +.SH "DESCRIPTION" +Expands every "ANY DEFINED BY" element of a structure created from +a DER decoding process (asn1_der_decoding function). The element +ANY must be defined by an OBJECT IDENTIFIER. The type used to +expand the element ANY is the first one following the definition of +the actual value of the OBJECT IDENTIFIER. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if Substitution OK, \fBASN1_ERROR_TYPE_ANY\fP if +some "ANY DEFINED BY" element couldn't be expanded due to a +problem in OBJECT_ID \-> TYPE association, or other error codes +depending on DER decoding. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_expand_octet_string.3 b/doc/man/asn1_expand_octet_string.3 new file mode 100644 index 0000000..8cc34a7 --- /dev/null +++ b/doc/man/asn1_expand_octet_string.3 @@ -0,0 +1,50 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_expand_octet_string" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_expand_octet_string \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_expand_octet_string(asn1_node " definitions ", asn1_node * " element ", const char * " octetName ", const char * " objectName ");" +.SH ARGUMENTS +.IP "asn1_node definitions" 12 +ASN1 definitions +.IP "asn1_node * element" 12 +pointer to an ASN1 structure +.IP "const char * octetName" 12 +name of the OCTECT STRING field to expand. +.IP "const char * objectName" 12 +name of the OBJECT IDENTIFIER field to use to define +the type for expansion. +.SH "DESCRIPTION" +Expands an "OCTET STRING" element of a structure created from a DER +decoding process (the \fBasn1_der_decoding()\fP function). The type used +for expansion is the first one following the definition of the +actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if substitution OK, \fBASN1_ELEMENT_NOT_FOUND\fP +if \fIobjectName\fP or \fIoctetName\fP are not correct, +\fBASN1_VALUE_NOT_VALID\fP if it wasn't possible to find the type to +use for expansion, or other errors depending on DER decoding. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_find_node.3 b/doc/man/asn1_find_node.3 new file mode 100644 index 0000000..eb61677 --- /dev/null +++ b/doc/man/asn1_find_node.3 @@ -0,0 +1,42 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_find_node" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_find_node \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "asn1_node asn1_find_node(asn1_node " pointer ", const char * " name ");" +.SH ARGUMENTS +.IP "asn1_node pointer" 12 +NODE_ASN element pointer. +.IP "const char * name" 12 +null terminated string with the element's name to find. +.SH "DESCRIPTION" +Searches for an element called \fIname\fP starting from \fIpointer\fP . The +name is composed by differents identifiers separated by dots. When +* \fIpointer\fP has a name, the first identifier must be the name of +* \fIpointer\fP , otherwise it must be the name of one child of * \fIpointer\fP . +.SH "RETURNS" +the search result, or \fBNULL\fP if not found. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_find_structure_from_oid.3 b/doc/man/asn1_find_structure_from_oid.3 new file mode 100644 index 0000000..0e71339 --- /dev/null +++ b/doc/man/asn1_find_structure_from_oid.3 @@ -0,0 +1,41 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_find_structure_from_oid" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_find_structure_from_oid \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "const char * asn1_find_structure_from_oid(asn1_node " definitions ", const char * " oidValue ");" +.SH ARGUMENTS +.IP "asn1_node definitions" 12 +ASN1 definitions +.IP "const char * oidValue" 12 +value of the OID to search (e.g. "1.2.3.4"). +.SH "DESCRIPTION" +Search the structure that is defined just after an OID definition. +.SH "RETURNS" +\fBNULL\fP when \fIoidValue\fP not found, otherwise the pointer to a +constant string that contains the element name defined just after +the OID. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_get_bit_der.3 b/doc/man/asn1_get_bit_der.3 new file mode 100644 index 0000000..9e60ea8 --- /dev/null +++ b/doc/man/asn1_get_bit_der.3 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_get_bit_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_get_bit_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_get_bit_der(const unsigned char * " der ", int " der_len ", int * " ret_len ", unsigned char * " str ", int " str_size ", int * " bit_len ");" +.SH ARGUMENTS +.IP "const unsigned char * der" 12 +DER data to decode containing the BIT SEQUENCE. +.IP "int der_len" 12 +Length of DER data to decode. +.IP "int * ret_len" 12 +Output variable containing the length of the DER data. +.IP "unsigned char * str" 12 +Pre\-allocated output buffer to put decoded BIT SEQUENCE in. +.IP "int str_size" 12 +Length of pre\-allocated output buffer. +.IP "int * bit_len" 12 +Output variable containing the size of the BIT SEQUENCE. +.SH "DESCRIPTION" +Extract a BIT SEQUENCE from DER data. +.SH "RETURNS" +\fBASN1_SUCCESS\fP on success, or an error. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_get_length_ber.3 b/doc/man/asn1_get_length_ber.3 new file mode 100644 index 0000000..289ae44 --- /dev/null +++ b/doc/man/asn1_get_length_ber.3 @@ -0,0 +1,46 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_get_length_ber" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_get_length_ber \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "long asn1_get_length_ber(const unsigned char * " ber ", int " ber_len ", int * " len ");" +.SH ARGUMENTS +.IP "const unsigned char * ber" 12 +BER data to decode. +.IP "int ber_len" 12 +Length of BER data to decode. +.IP "int * len" 12 +Output variable containing the length of the BER length field. +.SH "DESCRIPTION" +Extract a length field from BER data. The difference to +\fBasn1_get_length_der()\fP is that this function will return a length +even if the value has indefinite encoding. +.SH "RETURNS" +Return the decoded length value, or negative value when +the value was too big. +.SH "SINCE" +2.0 +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_get_length_der.3 b/doc/man/asn1_get_length_der.3 new file mode 100644 index 0000000..b2157af --- /dev/null +++ b/doc/man/asn1_get_length_der.3 @@ -0,0 +1,43 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_get_length_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_get_length_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "long asn1_get_length_der(const unsigned char * " der ", int " der_len ", int * " len ");" +.SH ARGUMENTS +.IP "const unsigned char * der" 12 +DER data to decode. +.IP "int der_len" 12 +Length of DER data to decode. +.IP "int * len" 12 +Output variable containing the length of the DER length field. +.SH "DESCRIPTION" +Extract a length field from DER data. +.SH "RETURNS" +Return the decoded length value, or \-1 on indefinite +length, or \-2 when the value was too big to fit in a int, or \-4 +when the decoded length value plus \fIlen\fP would exceed \fIder_len\fP . +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_get_object_id_der.3 b/doc/man/asn1_get_object_id_der.3 new file mode 100644 index 0000000..fdef87a --- /dev/null +++ b/doc/man/asn1_get_object_id_der.3 @@ -0,0 +1,45 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_get_object_id_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_get_object_id_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_get_object_id_der(const unsigned char * " der ", int " der_len ", int * " ret_len ", char * " str ", int " str_size ");" +.SH ARGUMENTS +.IP "const unsigned char * der" 12 +DER data to decode containing the OBJECT IDENTIFIER +.IP "int der_len" 12 +Length of DER data to decode. +.IP "int * ret_len" 12 +Output variable containing the length of the DER data. +.IP "char * str" 12 +Pre\-allocated output buffer to put the textual object id in. +.IP "int str_size" 12 +Length of pre\-allocated output buffer. +.SH "DESCRIPTION" +Converts a DER encoded object identifier to its textual form. +.SH "RETURNS" +\fBASN1_SUCCESS\fP on success, or an error. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_get_octet_der.3 b/doc/man/asn1_get_octet_der.3 new file mode 100644 index 0000000..e142e52 --- /dev/null +++ b/doc/man/asn1_get_octet_der.3 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_get_octet_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_get_octet_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_get_octet_der(const unsigned char * " der ", int " der_len ", int * " ret_len ", unsigned char * " str ", int " str_size ", int * " str_len ");" +.SH ARGUMENTS +.IP "const unsigned char * der" 12 +DER data to decode containing the OCTET SEQUENCE. +.IP "int der_len" 12 +Length of DER data to decode. +.IP "int * ret_len" 12 +Output variable containing the length of the DER data. +.IP "unsigned char * str" 12 +Pre\-allocated output buffer to put decoded OCTET SEQUENCE in. +.IP "int str_size" 12 +Length of pre\-allocated output buffer. +.IP "int * str_len" 12 +Output variable containing the length of the OCTET SEQUENCE. +.SH "DESCRIPTION" +Extract an OCTET SEQUENCE from DER data. +.SH "RETURNS" +Returns \fBASN1_SUCCESS\fP on success, or an error. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_get_tag_der.3 b/doc/man/asn1_get_tag_der.3 new file mode 100644 index 0000000..c39ca94 --- /dev/null +++ b/doc/man/asn1_get_tag_der.3 @@ -0,0 +1,45 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_get_tag_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_get_tag_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_get_tag_der(const unsigned char * " der ", int " der_len ", unsigned char * " cls ", int * " len ", unsigned long * " tag ");" +.SH ARGUMENTS +.IP "const unsigned char * der" 12 +DER data to decode. +.IP "int der_len" 12 +Length of DER data to decode. +.IP "unsigned char * cls" 12 +Output variable containing decoded class. +.IP "int * len" 12 +Output variable containing the length of the DER TAG data. +.IP "unsigned long * tag" 12 +Output variable containing the decoded tag. +.SH "DESCRIPTION" +Decode the class and TAG from DER code. +.SH "RETURNS" +Returns \fBASN1_SUCCESS\fP on success, or an error. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_length_der.3 b/doc/man/asn1_length_der.3 new file mode 100644 index 0000000..6bae394 --- /dev/null +++ b/doc/man/asn1_length_der.3 @@ -0,0 +1,43 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_length_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_length_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "void asn1_length_der(unsigned long int " len ", unsigned char * " der ", int * " der_len ");" +.SH ARGUMENTS +.IP "unsigned long int len" 12 +value to convert. +.IP "unsigned char * der" 12 +buffer to hold the returned encoding (may be \fBNULL\fP). +.IP "int * der_len" 12 +number of meaningful bytes of ANS (der[0]..der[der_len\-1]). +.SH "DESCRIPTION" +Creates the DER encoding of the provided length value. +The \fIder\fP buffer must have enough room for the output. The maximum +length this function will encode is \fBASN1_MAX_LENGTH_SIZE\fP. + +To know the size of the DER encoding use a \fBNULL\fP value for \fIder\fP . +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_number_of_elements.3 b/doc/man/asn1_number_of_elements.3 new file mode 100644 index 0000000..414d293 --- /dev/null +++ b/doc/man/asn1_number_of_elements.3 @@ -0,0 +1,43 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_number_of_elements" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_number_of_elements \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_number_of_elements(asn1_node " element ", const char * " name ", int * " num ");" +.SH ARGUMENTS +.IP "asn1_node element" 12 +pointer to the root of an ASN1 structure. +.IP "const char * name" 12 +the name of a sub\-structure of ROOT. +.IP "int * num" 12 +pointer to an integer where the result will be stored +.SH "DESCRIPTION" +Counts the number of elements of a sub\-structure called NAME with +names equal to "?1","?2", ... +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if + \fIname\fP is not known, \fBASN1_GENERIC_ERROR\fP if pointer \fInum\fP is \fBNULL\fP. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_octet_der.3 b/doc/man/asn1_octet_der.3 new file mode 100644 index 0000000..1f40633 --- /dev/null +++ b/doc/man/asn1_octet_der.3 @@ -0,0 +1,49 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_octet_der" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_octet_der \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "void asn1_octet_der(const unsigned char * " str ", int " str_len ", unsigned char * " der ", int * " der_len ");" +.SH ARGUMENTS +.IP "const unsigned char * str" 12 +the input data. +.IP "int str_len" 12 +STR length (str[0]..str[*str_len\-1]). +.IP "unsigned char * der" 12 +encoded string returned. +.IP "int * der_len" 12 +number of meaningful bytes of DER (der[0]..der[der_len\-1]). +.SH "DESCRIPTION" +Creates a length\-value DER encoding for the input data. +The DER encoding of the input data will be placed in the \fIder\fP variable. + +Note that the OCTET STRING tag is not included in the output. + +This function does not return any value because it is expected +that \fIder_len\fP will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +\fBasn1_length_der()\fP. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_parser2array.3 b/doc/man/asn1_parser2array.3 new file mode 100644 index 0000000..38929fc --- /dev/null +++ b/doc/man/asn1_parser2array.3 @@ -0,0 +1,57 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_parser2array" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_parser2array \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_parser2array(const char * " inputFileName ", const char * " outputFileName ", const char * " vectorName ", char * " error_desc ");" +.SH ARGUMENTS +.IP "const char * inputFileName" 12 +specify the path and the name of file that +contains ASN.1 declarations. +.IP "const char * outputFileName" 12 +specify the path and the name of file that will +contain the C vector definition. +.IP "const char * vectorName" 12 +specify the name of the C vector. +.IP "char * error_desc" 12 +return the error description or an empty +string if success. +.SH "DESCRIPTION" +Function that generates a C structure from an ASN1 file. Creates a +file containing a C vector to use to manage the definitions +included in \fIinputFileName\fP file. If \fIinputFileName\fP is +"/aa/bb/xx.yy" and \fIoutputFileName\fP is \fBNULL\fP, the file created is +"/aa/bb/xx_asn1_tab.c". If \fIvectorName\fP is \fBNULL\fP the vector name +will be "xx_asn1_tab". +.SH "RETURNS" +\fBASN1_SUCCESS\fP if the file has a correct syntax and every +identifier is known, \fBASN1_FILE_NOT_FOUND\fP if an error occured +while opening \fIinputFileName\fP , \fBASN1_SYNTAX_ERROR\fP if the syntax is +not correct, \fBASN1_IDENTIFIER_NOT_FOUND\fP if in the file there is +an identifier that is not defined, \fBASN1_NAME_TOO_LONG\fP if in the +file there is an identifier whith more than \fBASN1_MAX_NAME_SIZE\fP +characters. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_parser2tree.3 b/doc/man/asn1_parser2tree.3 new file mode 100644 index 0000000..c29b411 --- /dev/null +++ b/doc/man/asn1_parser2tree.3 @@ -0,0 +1,52 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_parser2tree" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_parser2tree \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_parser2tree(const char * " file ", asn1_node * " definitions ", char * " error_desc ");" +.SH ARGUMENTS +.IP "const char * file" 12 +specify the path and the name of file that contains +ASN.1 declarations. +.IP "asn1_node * definitions" 12 +return the pointer to the structure created from +"file" ASN.1 declarations. +.IP "char * error_desc" 12 +return the error description or an empty +string if success. +.SH "DESCRIPTION" +Function used to start the parse algorithm. Creates the structures +needed to manage the definitions included in \fIfile\fP file. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if the file has a correct syntax and every +identifier is known, \fBASN1_ELEMENT_NOT_EMPTY\fP if \fIdefinitions\fP not +\fBNULL\fP, \fBASN1_FILE_NOT_FOUND\fP if an error occured while +opening \fIfile\fP , \fBASN1_SYNTAX_ERROR\fP if the syntax is not +correct, \fBASN1_IDENTIFIER_NOT_FOUND\fP if in the file there is an +identifier that is not defined, \fBASN1_NAME_TOO_LONG\fP if in the +file there is an identifier whith more than \fBASN1_MAX_NAME_SIZE\fP +characters. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_perror.3 b/doc/man/asn1_perror.3 new file mode 100644 index 0000000..7dd11ba --- /dev/null +++ b/doc/man/asn1_perror.3 @@ -0,0 +1,39 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_perror" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_perror \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "void asn1_perror(int " error ");" +.SH ARGUMENTS +.IP "int error" 12 +is an error returned by a libtasn1 function. +.SH "DESCRIPTION" +Prints a string to stderr with a description of an error. This +function is like \fBperror()\fP. The only difference is that it accepts +an error returned by a libtasn1 function. +.SH "SINCE" +1.6 +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_print_structure.3 b/doc/man/asn1_print_structure.3 new file mode 100644 index 0000000..f259828 --- /dev/null +++ b/doc/man/asn1_print_structure.3 @@ -0,0 +1,44 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_print_structure" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_print_structure \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "void asn1_print_structure(FILE * " out ", asn1_node " structure ", const char * " name ", int " mode ");" +.SH ARGUMENTS +.IP "FILE * out" 12 +pointer to the output file (e.g. stdout). +.IP "asn1_node structure" 12 +pointer to the structure that you want to visit. +.IP "const char * name" 12 +an element of the structure +.IP "int mode" 12 +specify how much of the structure to print, can be +\fBASN1_PRINT_NAME\fP, \fBASN1_PRINT_NAME_TYPE\fP, +\fBASN1_PRINT_NAME_TYPE_VALUE\fP, or \fBASN1_PRINT_ALL\fP. +.SH "DESCRIPTION" +Prints on the \fIout\fP file descriptor the structure's tree starting +from the \fIname\fP element inside the structure \fIstructure\fP . +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_read_node_value.3 b/doc/man/asn1_read_node_value.3 new file mode 100644 index 0000000..590d1ac --- /dev/null +++ b/doc/man/asn1_read_node_value.3 @@ -0,0 +1,40 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_read_node_value" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_read_node_value \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_read_node_value(asn1_node " node ", asn1_data_node_st * " data ");" +.SH ARGUMENTS +.IP "asn1_node node" 12 +pointer to a node. +.IP "asn1_data_node_st * data" 12 +a point to a asn1_data_node_st +.SH "DESCRIPTION" +Returns the value a data node inside a asn1_node structure. +The data returned should be handled as constant values. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if the node exists. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_read_tag.3 b/doc/man/asn1_read_tag.3 new file mode 100644 index 0000000..c9c967d --- /dev/null +++ b/doc/man/asn1_read_tag.3 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_read_tag" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_read_tag \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_read_tag(asn1_node " root ", const char * " name ", int * " tagValue ", int * " classValue ");" +.SH ARGUMENTS +.IP "asn1_node root" 12 +pointer to a structure +.IP "const char * name" 12 +the name of the element inside a structure. +.IP "int * tagValue" 12 +variable that will contain the TAG value. +.IP "int * classValue" 12 +variable that will specify the TAG type. +.SH "DESCRIPTION" +Returns the TAG and the CLASS of one element inside a structure. +CLASS can have one of these constants: \fBASN1_CLASS_APPLICATION\fP, +\fBASN1_CLASS_UNIVERSAL\fP, \fBASN1_CLASS_PRIVATE\fP or +\fBASN1_CLASS_CONTEXT_SPECIFIC\fP. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if + \fIname\fP is not a valid element. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_read_value.3 b/doc/man/asn1_read_value.3 new file mode 100644 index 0000000..49f8ce4 --- /dev/null +++ b/doc/man/asn1_read_value.3 @@ -0,0 +1,97 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_read_value" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_read_value \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_read_value(asn1_node " root ", const char * " name ", void * " ivalue ", int * " len ");" +.SH ARGUMENTS +.IP "asn1_node root" 12 +pointer to a structure. +.IP "const char * name" 12 +the name of the element inside a structure that you want to read. +.IP "void * ivalue" 12 +vector that will contain the element's content, must be a +pointer to memory cells already allocated (may be \fBNULL\fP). +.IP "int * len" 12 +number of bytes of *value: value[0]..value[len\-1]. Initialy +holds the sizeof value. +.SH "DESCRIPTION" +Returns the value of one element inside a structure. +If an element is OPTIONAL and this returns +\fBASN1_ELEMENT_NOT_FOUND\fP, it means that this element wasn't present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the \fIroot\fP provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. + +Note that there can be valid values with length zero. In these case +this function will succeed and \fIlen\fP will be zero. +.SH "INTEGER" +VALUE will contain a two's complement form integer. + +integer=\-1 \-> value[0]=0xFF , len=1. +integer=1 \-> value[0]=0x01 , len=1. +.SH "ENUMERATED" +As INTEGER (but only with not negative numbers). +.SH "BOOLEAN" +VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. + +OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). + +LEN = strlen(VALUE)+1 +.SH "UTCTIME" +VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss\-hh'mm'". +LEN=strlen(VALUE)+1. +.SH "GENERALIZEDTIME" +VALUE will be a null terminated string in the +same format used to set the value. + +OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. +.SH "GENERALSTRING" +VALUE will contain the generalstring and LEN will +be the number of octets. + +BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. +.SH "CHOICE" +If NAME indicates a choice type, VALUE will specify the +alternative selected. +.SH "ANY" +If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if value is returned, +\fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, +\fBASN1_VALUE_NOT_FOUND\fP if there isn't any value for the element +selected, and \fBASN1_MEM_ERROR\fP if The value vector isn't big enough +to store the result, and in this case \fIlen\fP will contain the number of +bytes needed. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_read_value_type.3 b/doc/man/asn1_read_value_type.3 new file mode 100644 index 0000000..8cb2ec9 --- /dev/null +++ b/doc/man/asn1_read_value_type.3 @@ -0,0 +1,99 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_read_value_type" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_read_value_type \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_read_value_type(asn1_node " root ", const char * " name ", void * " ivalue ", int * " len ", unsigned int * " etype ");" +.SH ARGUMENTS +.IP "asn1_node root" 12 +pointer to a structure. +.IP "const char * name" 12 +the name of the element inside a structure that you want to read. +.IP "void * ivalue" 12 +vector that will contain the element's content, must be a +pointer to memory cells already allocated (may be \fBNULL\fP). +.IP "int * len" 12 +number of bytes of *value: value[0]..value[len\-1]. Initialy +holds the sizeof value. +.IP "unsigned int * etype" 12 +The type of the value read (ASN1_ETYPE) +.SH "DESCRIPTION" +Returns the type and value of one element inside a structure. +If an element is OPTIONAL and this returns +\fBASN1_ELEMENT_NOT_FOUND\fP, it means that this element wasn't present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the \fIroot\fP provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. + +Note that there can be valid values with length zero. In these case +this function will succeed and \fIlen\fP will be zero. +.SH "INTEGER" +VALUE will contain a two's complement form integer. + +integer=\-1 \-> value[0]=0xFF , len=1. +integer=1 \-> value[0]=0x01 , len=1. +.SH "ENUMERATED" +As INTEGER (but only with not negative numbers). +.SH "BOOLEAN" +VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. + +OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). + +LEN = strlen(VALUE)+1 +.SH "UTCTIME" +VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss\-hh'mm'". +LEN=strlen(VALUE)+1. +.SH "GENERALIZEDTIME" +VALUE will be a null terminated string in the +same format used to set the value. + +OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. +.SH "GENERALSTRING" +VALUE will contain the generalstring and LEN will +be the number of octets. + +BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. +.SH "CHOICE" +If NAME indicates a choice type, VALUE will specify the +alternative selected. +.SH "ANY" +If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. +.SH "RETURNS" +\fBASN1_SUCCESS\fP if value is returned, +\fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, +\fBASN1_VALUE_NOT_FOUND\fP if there isn't any value for the element +selected, and \fBASN1_MEM_ERROR\fP if The value vector isn't big enough +to store the result, and in this case \fIlen\fP will contain the number of +bytes needed. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_strerror.3 b/doc/man/asn1_strerror.3 new file mode 100644 index 0000000..9c33edd --- /dev/null +++ b/doc/man/asn1_strerror.3 @@ -0,0 +1,42 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_strerror" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_strerror \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "const char * asn1_strerror(int " error ");" +.SH ARGUMENTS +.IP "int error" 12 +is an error returned by a libtasn1 function. +.SH "DESCRIPTION" +Returns a string with a description of an error. This function is +similar to strerror. The only difference is that it accepts an +error (number) returned by a libtasn1 function. +.SH "RETURNS" +Pointer to static zero\-terminated string describing error +code. +.SH "SINCE" +1.6 +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/man/asn1_write_value.3 b/doc/man/asn1_write_value.3 new file mode 100644 index 0000000..bd35336 --- /dev/null +++ b/doc/man/asn1_write_value.3 @@ -0,0 +1,138 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. +.TH "asn1_write_value" 3 "4.8" "libtasn1" "libtasn1" +.SH NAME +asn1_write_value \- API function +.SH SYNOPSIS +.B #include <libtasn1.h> +.sp +.BI "int asn1_write_value(asn1_node " node_root ", const char * " name ", const void * " ivalue ", int " len ");" +.SH ARGUMENTS +.IP "asn1_node node_root" 12 +pointer to a structure +.IP "const char * name" 12 +the name of the element inside the structure that you want to set. +.IP "const void * ivalue" 12 +vector used to specify the value to set. If len is >0, +VALUE must be a two's complement form integer. if len=0 *VALUE +must be a null terminated string with an integer value. +.IP "int len" 12 +number of bytes of *value to use to set the value: +value[0]..value[len\-1] or 0 if value is a null terminated string +.SH "DESCRIPTION" +Set the value of one element inside a structure. + +If an element is OPTIONAL and you want to delete it, you must use +the value=NULL and len=0. Using "pkix.asn": + +result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", +NULL, 0); + +Description for each type: +.SH "INTEGER" +VALUE must contain a two's complement form integer. + +value[0]=0xFF , len=1 \-> integer=\-1. +value[0]=0xFF value[1]=0xFF , len=2 \-> integer=\-1. +value[0]=0x01 , len=1 \-> integer= 1. +value[0]=0x00 value[1]=0x01 , len=2 \-> integer= 1. +value="123" , len=0 \-> integer= 123. +.SH "ENUMERATED" +As INTEGER (but only with not negative numbers). +.SH "BOOLEAN" +VALUE must be the null terminated string "TRUE" or +"FALSE" and LEN != 0. + +value="TRUE" , len=1 \-> boolean=TRUE. +value="FALSE" , len=1 \-> boolean=FALSE. + +OBJECT IDENTIFIER: VALUE must be a null terminated string with +each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. + +value="1 2 840 10040 4 3" , len=1 \-> OID=dsa\-with\-sha. +.SH "UTCTIME" +VALUE must be a null terminated string in one of these +formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", +"YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss\-hh'mm'", +"YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm\-hh'mm'". LEN != 0. + +value="9801011200Z" , len=1 \-> time=Jannuary 1st, 1998 +at 12h 00m Greenwich Mean Time +.SH "GENERALIZEDTIME" +VALUE must be in one of this format: +"YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", +"YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s\-hh'mm'", +"YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm\-hh'mm'" where ss.s +indicates the seconds with any precision like "10.1" or "01.02". +LEN != 0 + +value="2001010112001.12\-0700" , len=1 \-> time=Jannuary +1st, 2001 at 12h 00m 01.12s Pacific Daylight Time + +OCTET STRING: VALUE contains the octet string and LEN is the +number of octets. + +value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 \-> three bytes octet string +.SH "GENERALSTRING" +VALUE contains the generalstring and LEN is the +number of octets. + +value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 \-> three bytes generalstring + +BIT STRING: VALUE contains the bit string organized by bytes and +LEN is the number of bits. + +value="$\backslash$xCF" , len=6 \-> bit string="110011" (six +bits) +.SH "CHOICE" +if NAME indicates a choice type, VALUE must specify one of +the alternatives with a null terminated string. LEN != 0. Using +"pkix.asn"\: + +result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject", "rdnSequence", +1); +.SH "ANY" +VALUE indicates the der encoding of a structure. LEN != 0. + +SEQUENCE OF: VALUE must be the null terminated string "NEW" and +LEN != 0. With this instruction another element is appended in +the sequence. The name of this element will be "?1" if it's the +first one, "?2" for the second and so on. + +Using "pkix.asn"\: + +result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); + +SET OF: the same as SEQUENCE OF. Using "pkix.asn": + +result=asn1_write_value(cert, +"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); +.SH "RETURNS" +\fBASN1_SUCCESS\fP if the value was set, +\fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, and +\fBASN1_VALUE_NOT_VALID\fP if \fIivalue\fP has a wrong format. +.SH COPYRIGHT +Copyright \(co 2006-2015 Free Software Foundation, Inc.. +.br +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +.SH "SEE ALSO" +The full documentation for +.B libtasn1 +is maintained as a Texinfo manual. If the +.B info +and +.B libtasn1 +programs are properly installed at your site, the command +.IP +.B info libtasn1 +.PP +should give you access to the complete manual. +As an alternative you may obtain the manual from: +.IP +.B http://www.gnu.org/software/libtasn1/manual/ +.PP diff --git a/doc/reference/Makefile.in b/doc/reference/Makefile.in new file mode 100644 index 0000000..2bcdc2d --- /dev/null +++ b/doc/reference/Makefile.in @@ -0,0 +1,1382 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# -*- mode: makefile -*- + +#################################### +# Everything below here is generic # +#################################### +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc/reference +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/lib/glm4/gnulib-comp.m4 \ + $(top_srcdir)/lib/glm4/ld-version-script.m4 \ + $(top_srcdir)/lib/glm4/minmax.m4 \ + $(top_srcdir)/lib/glm4/string_h.m4 \ + $(top_srcdir)/lib/glm4/strverscmp.m4 \ + $(top_srcdir)/lib/glm4/visibility.m4 \ + $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/absolute-header.m4 \ + $(top_srcdir)/gl/m4/autobuild.m4 \ + $(top_srcdir)/gl/m4/clock_time.m4 \ + $(top_srcdir)/gl/m4/errno_h.m4 \ + $(top_srcdir)/gl/m4/extensions.m4 \ + $(top_srcdir)/gl/m4/extern-inline.m4 \ + $(top_srcdir)/gl/m4/fseeko.m4 $(top_srcdir)/gl/m4/fstat.m4 \ + $(top_srcdir)/gl/m4/ftell.m4 $(top_srcdir)/gl/m4/ftello.m4 \ + $(top_srcdir)/gl/m4/getopt.m4 $(top_srcdir)/gl/m4/gettime.m4 \ + $(top_srcdir)/gl/m4/gettimeofday.m4 \ + $(top_srcdir)/gl/m4/gnulib-common.m4 \ + $(top_srcdir)/gl/m4/gnulib-comp.m4 \ + $(top_srcdir)/gl/m4/include_next.m4 \ + $(top_srcdir)/gl/m4/largefile.m4 \ + $(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/lseek.m4 \ + $(top_srcdir)/gl/m4/malloc.m4 \ + $(top_srcdir)/gl/m4/manywarnings.m4 \ + $(top_srcdir)/gl/m4/msvc-inval.m4 \ + $(top_srcdir)/gl/m4/msvc-nothrow.m4 \ + $(top_srcdir)/gl/m4/multiarch.m4 \ + $(top_srcdir)/gl/m4/nocrash.m4 $(top_srcdir)/gl/m4/off_t.m4 \ + $(top_srcdir)/gl/m4/read-file.m4 \ + $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/ssize_t.m4 \ + $(top_srcdir)/gl/m4/stdarg.m4 $(top_srcdir)/gl/m4/stddef_h.m4 \ + $(top_srcdir)/gl/m4/stdint.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \ + $(top_srcdir)/gl/m4/stdlib_h.m4 \ + $(top_srcdir)/gl/m4/sys_socket_h.m4 \ + $(top_srcdir)/gl/m4/sys_stat_h.m4 \ + $(top_srcdir)/gl/m4/sys_time_h.m4 \ + $(top_srcdir)/gl/m4/sys_types_h.m4 \ + $(top_srcdir)/gl/m4/time_h.m4 $(top_srcdir)/gl/m4/timespec.m4 \ + $(top_srcdir)/gl/m4/unistd_h.m4 \ + $(top_srcdir)/gl/m4/valgrind-tests.m4 \ + $(top_srcdir)/gl/m4/version-etc.m4 \ + $(top_srcdir)/gl/m4/warn-on-use.m4 \ + $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/gl/m4/wchar_t.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/pkg.m4 \ + $(top_srcdir)/m4/update-header-version.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = version.xml +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/version.xml.in \ + $(top_srcdir)/gtk-doc.make +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HTML_DIR = @HTML_DIR@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_REVISION = @LT_REVISION@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PMCCABE = @PMCCABE@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +VALGRIND = @VALGRIND@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lgl_LIBOBJS = @lgl_LIBOBJS@ +lgl_LTLIBOBJS = @lgl_LTLIBOBJS@ +lgltests_LIBOBJS = @lgltests_LIBOBJS@ +lgltests_LTLIBOBJS = @lgltests_LTLIBOBJS@ +lgltests_WITNESS = @lgltests_WITNESS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# We require automake 1.6 at least. +AUTOMAKE_OPTIONS = 1.6 + +# This is a blank Makefile.am for using gtk-doc. +# Copy this to your project's API docs directory and modify the variables to +# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples +# of using the various options. + +# The name of the module, e.g. 'glib'. +DOC_MODULE = $(PACKAGE) + +# Uncomment for versioned docs and specify the version of the module, e.g. '2'. +#DOC_MODULE_VERSION=2 + +# The top-level SGML file. You can change this if you want to. +DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml + +# Directories containing the source code. +# gtk-doc will search all .c and .h files beneath these paths +# for inline comments documenting functions and macros. +# e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk +DOC_SOURCE_DIR = $(top_srcdir)/lib + +# Extra options to pass to gtkdoc-scangobj. Not normally needed. +SCANGOBJ_OPTIONS = + +# Extra options to supply to gtkdoc-scan. +# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" +SCAN_OPTIONS = --ignore-decorators=ASN1_API + +# Extra options to supply to gtkdoc-mkdb. +# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml +MKDB_OPTIONS = --xml-mode --output-format=xml + +# Extra options to supply to gtkdoc-mktmpl +# e.g. MKTMPL_OPTIONS=--only-section-tmpl +MKTMPL_OPTIONS = + +# Extra options to supply to gtkdoc-mkhtml +MKHTML_OPTIONS = + +# Extra options to supply to gtkdoc-fixref. Not normally needed. +# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html +FIXXREF_OPTIONS = + +# Used for dependencies. The docs will be rebuilt if any of these change. +# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h +# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c +HFILE_GLOB = $(top_srcdir)/lib/*.h +CFILE_GLOB = $(top_srcdir)/lib/*.c + +# Extra header to include when scanning, which are not under DOC_SOURCE_DIR +# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h +EXTRA_HFILES = + +# Header files or dirs to ignore when scanning. Use base file/dir names +# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code +IGNORE_HFILES = element.h gstr.h int.h parser_aux.h structure.h gllib + +# Images to copy into HTML directory. +# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png +HTML_IMAGES = + +# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). +# e.g. content_files=running.sgml building.sgml changes-2.0.sgml +content_files = + +# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded +# These files must be listed here *and* in content_files +# e.g. expand_content_files=running.sgml +expand_content_files = + +# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. +# Only needed if you are using gtkdoc-scangobj to dynamically query widget +# signals and properties. +# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) +# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) +GTKDOC_CFLAGS = +GTKDOC_LIBS = +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) +TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) +SETUP_FILES = \ + $(content_files) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt + + +# This includes the standard gtk-doc make rules, copied by gtkdocize. + +# Other files to distribute +# e.g. EXTRA_DIST += version.xml.in +EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) +DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ + html-build.stamp pdf-build.stamp \ + tmpl.stamp sgml.stamp html.stamp pdf.stamp + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals + +REPORT_FILES = \ + $(DOC_MODULE)-undocumented.txt \ + $(DOC_MODULE)-undeclared.txt \ + $(DOC_MODULE)-unused.txt + +CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) +@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = +@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp +@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = +@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp + +# Files not to distribute +# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types +# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt +#DISTCLEANFILES += + +# Comment this out if you want 'make check' to test you doc status +# and run some sanity checks +@ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = cd $(srcdir) && \ +@ENABLE_GTK_DOC_TRUE@ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ +@ENABLE_GTK_DOC_TRUE@ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/reference/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/reference/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/gtk-doc.make $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local cscopelist-am ctags-am dist-hook \ + distclean distclean-generic distclean-libtool distclean-local \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-data-local \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + maintainer-clean-local mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-local + +.PRECIOUS: Makefile + + +@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) +@ENABLE_GTK_DOC_FALSE@all-local: + +docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) + +$(REPORT_FILES): sgml-build.stamp + +#### setup #### + +setup-build.stamp: + -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + echo ' DOC Preparing build'; \ + files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ + if test "x$$files" != "x" ; then \ + for file in $$files ; do \ + test -f $(abs_srcdir)/$$file && \ + cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ + done; \ + fi; \ + test -d $(abs_srcdir)/tmpl && \ + { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ + chmod -R u+w $(abs_builddir)/tmpl; } \ + fi + @touch setup-build.stamp + +#### scan #### + +scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) + @echo ' DOC Scanning header files' + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) + @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ + echo " DOC Introspecting gobjects"; \ + scanobj_options=""; \ + gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + scanobj_options="--verbose"; \ + fi; \ + fi; \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ + gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ + else \ + for i in $(SCANOBJ_FILES) ; do \ + test -f $$i || touch $$i ; \ + done \ + fi + @touch scan-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp + @true + +#### templates #### + +tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt + @echo ' DOC Rebuilding template files' + @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + if test -w $(abs_srcdir) ; then \ + cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ + fi \ + fi + @touch tmpl-build.stamp + +tmpl.stamp: tmpl-build.stamp + @true + +$(srcdir)/tmpl/*.sgml: + @true + +#### xml #### + +sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) + @echo ' DOC Building XML' + @-chmod -R u+w $(srcdir) + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) + @touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @mkhtml_options=""; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkhtml_options="$$mkhtml_options --verbose"; \ + fi; \ + fi; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ + if test "$(?)" = "0"; then \ + mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ + fi; \ + cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) + -@test "x$(HTML_IMAGES)" = "x" || \ + for file in $(HTML_IMAGES) ; do \ + if test -f $(abs_srcdir)/$$file ; then \ + cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ + fi; \ + if test -f $(abs_builddir)/$$file ; then \ + cp $(abs_builddir)/$$file $(abs_builddir)/html; \ + fi; \ + done; + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp + +#### pdf #### + +pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building PDF' + @rm -f $(DOC_MODULE).pdf + @mkpdf_options=""; \ + gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkpdf_options="$$mkpdf_options --verbose"; \ + fi; \ + fi; \ + if test "x$(HTML_IMAGES)" != "x"; then \ + for img in $(HTML_IMAGES); do \ + part=`dirname $$img`; \ + echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ + if test $$? != 0; then \ + mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ + fi; \ + done; \ + fi; \ + gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) + @touch pdf-build.stamp + +############## + +clean-local: + @rm -f *~ *.bak + @rm -rf .libs + +distclean-local: + @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ + $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ + rm -rf tmpl; \ + fi + +maintainer-clean-local: clean + @rm -rf xml html + +install-data-local: + @installfiles=`echo $(builddir)/html/*`; \ + if test "$$installfiles" = '$(builddir)/html/*'; \ + then echo 1>&2 'Nothing to install' ; \ + else \ + if test -n "$(DOC_MODULE_VERSION)"; then \ + installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ + else \ + installdir="$(DESTDIR)$(TARGET_DIR)"; \ + fi; \ + $(mkinstalldirs) $${installdir} ; \ + for i in $$installfiles; do \ + echo ' $(INSTALL_DATA) '$$i ; \ + $(INSTALL_DATA) $$i $${installdir}; \ + done; \ + if test -n "$(DOC_MODULE_VERSION)"; then \ + mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ + $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ + fi; \ + $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ + fi + +uninstall-local: + @if test -n "$(DOC_MODULE_VERSION)"; then \ + installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ + else \ + installdir="$(DESTDIR)$(TARGET_DIR)"; \ + fi; \ + rm -rf $${installdir} + +# +# Require gtk-doc when making dist +# +@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: +@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: +@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" +@ENABLE_GTK_DOC_FALSE@ @false + +dist-hook: dist-check-gtkdoc dist-hook-local + @mkdir $(distdir)/tmpl + @mkdir $(distdir)/html + @-cp ./tmpl/*.sgml $(distdir)/tmpl + @cp ./html/* $(distdir)/html + @-cp ./$(DOC_MODULE).pdf $(distdir)/ + @-cp ./$(DOC_MODULE).types $(distdir)/ + @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ + @cd $(distdir) && rm -f $(DISTCLEANFILES) + @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html + +.PHONY : dist-hook-local docs +#TESTS = $(GTKDOC_CHECK) + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/reference/html/api-index-full.html b/doc/reference/html/api-index-full.html new file mode 100644 index 0000000..3c1a4c5 --- /dev/null +++ b/doc/reference/html/api-index-full.html @@ -0,0 +1,274 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>API Index: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="up" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="prev" href="libtasn1-libtasn1.html" title="libtasn1"> +<link rel="next" href="ix02.html" title="Index of deprecated symbols"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> +<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxA">A</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxC">C</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxD">D</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxE">E</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxF">F</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxG">G</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxI">I</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxM">M</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxN">N</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxP">P</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxS">S</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxT">T</a> + Â <span class="dim">|</span>Â + <a class="shortcut" href="#idxV">V</a></span></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> +<td><img src="up-insensitive.png" width="16" height="16" border="0"></td> +<td><a accesskey="p" href="libtasn1-libtasn1.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> +<td><a accesskey="n" href="ix02.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> +</tr></table> +<div class="index"> +<div class="titlepage"><div><div><h1 class="title"> +<a name="api-index-full"></a>API Index</h1></div></div></div> +<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-API:CAPS" title="ASN1_API">ASN1_API</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS" title="ASN1_ARRAY_ERROR">ASN1_ARRAY_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxC"></a><h3 class="title">C</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS" title="ASN1_CLASS_APPLICATION">ASN1_CLASS_APPLICATION</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS" title="ASN1_CLASS_CONTEXT_SPECIFIC">ASN1_CLASS_CONTEXT_SPECIFIC</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS" title="ASN1_CLASS_PRIVATE">ASN1_CLASS_PRIVATE</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS" title="ASN1_CLASS_STRUCTURED">ASN1_CLASS_STRUCTURED</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS" title="ASN1_CLASS_UNIVERSAL">ASN1_CLASS_UNIVERSAL</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxD"></a><h3 class="title">D</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS" title="ASN1_DER_ERROR">ASN1_DER_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS" title="ASN1_DER_OVERFLOW">ASN1_DER_OVERFLOW</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxE"></a><h3 class="title">E</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS" title="ASN1_ELEMENT_NOT_EMPTY">ASN1_ELEMENT_NOT_EMPTY</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND">ASN1_ELEMENT_NOT_FOUND</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS" title="ASN1_ERROR_TYPE_ANY">ASN1_ERROR_TYPE_ANY</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxF"></a><h3 class="title">F</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS" title="ASN1_FILE_NOT_FOUND">ASN1_FILE_NOT_FOUND</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxG"></a><h3 class="title">G</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS" title="ASN1_GENERIC_ERROR">ASN1_GENERIC_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxI"></a><h3 class="title">I</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS" title="ASN1_IDENTIFIER_NOT_FOUND">ASN1_IDENTIFIER_NOT_FOUND</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxM"></a><h3 class="title">M</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS" title="ASN1_MAX_NAME_SIZE">ASN1_MAX_NAME_SIZE</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS" title="ASN1_MEM_ALLOC_ERROR">ASN1_MEM_ALLOC_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS" title="ASN1_MEM_ERROR">ASN1_MEM_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxN"></a><h3 class="title">N</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS" title="ASN1_NAME_TOO_LONG">ASN1_NAME_TOO_LONG</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#asn1-node" title="asn1_node">asn1_node</a>, typedef in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#asn1-node-st" title="asn1_node_st">asn1_node_st</a>, typedef in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxP"></a><h3 class="title">P</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS" title="ASN1_PRINT_ALL">ASN1_PRINT_ALL</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS" title="ASN1_PRINT_NAME">ASN1_PRINT_NAME</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS" title="ASN1_PRINT_NAME_TYPE">ASN1_PRINT_NAME_TYPE</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS" title="ASN1_PRINT_NAME_TYPE_VALUE">ASN1_PRINT_NAME_TYPE_VALUE</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxS"></a><h3 class="title">S</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS">ASN1_SUCCESS</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS" title="ASN1_SYNTAX_ERROR">ASN1_SYNTAX_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxT"></a><h3 class="title">T</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS" title="ASN1_TAG_BIT_STRING">ASN1_TAG_BIT_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BMP-STRING:CAPS" title="ASN1_TAG_BMP_STRING">ASN1_TAG_BMP_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS" title="ASN1_TAG_BOOLEAN">ASN1_TAG_BOOLEAN</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS" title="ASN1_TAG_ENUMERATED">ASN1_TAG_ENUMERATED</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS" title="ASN1_TAG_ERROR">ASN1_TAG_ERROR</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime" title="ASN1_TAG_GENERALIZEDTime">ASN1_TAG_GENERALIZEDTime</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS" title="ASN1_TAG_GENERALSTRING">ASN1_TAG_GENERALSTRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-IA5-STRING:CAPS" title="ASN1_TAG_IA5_STRING">ASN1_TAG_IA5_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS" title="ASN1_TAG_IMPLICIT">ASN1_TAG_IMPLICIT</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS" title="ASN1_TAG_INTEGER">ASN1_TAG_INTEGER</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS" title="ASN1_TAG_NULL">ASN1_TAG_NULL</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-NUMERIC-STRING:CAPS" title="ASN1_TAG_NUMERIC_STRING">ASN1_TAG_NUMERIC_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS" title="ASN1_TAG_OBJECT_ID">ASN1_TAG_OBJECT_ID</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS" title="ASN1_TAG_OCTET_STRING">ASN1_TAG_OCTET_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-PRINTABLE-STRING:CAPS" title="ASN1_TAG_PRINTABLE_STRING">ASN1_TAG_PRINTABLE_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS" title="ASN1_TAG_SEQUENCE">ASN1_TAG_SEQUENCE</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS" title="ASN1_TAG_SET">ASN1_TAG_SET</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-TELETEX-STRING:CAPS" title="ASN1_TAG_TELETEX_STRING">ASN1_TAG_TELETEX_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UNIVERSAL-STRING:CAPS" title="ASN1_TAG_UNIVERSAL_STRING">ASN1_TAG_UNIVERSAL_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UTCTime" title="ASN1_TAG_UTCTime">ASN1_TAG_UTCTime</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UTF8-STRING:CAPS" title="ASN1_TAG_UTF8_STRING">ASN1_TAG_UTF8_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-VISIBLE-STRING:CAPS" title="ASN1_TAG_VISIBLE_STRING">ASN1_TAG_VISIBLE_STRING</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<a name="idxV"></a><h3 class="title">V</h3> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS" title="ASN1_VALUE_NOT_FOUND">ASN1_VALUE_NOT_FOUND</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS" title="ASN1_VALUE_NOT_VALID">ASN1_VALUE_NOT_VALID</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libtasn1-libtasn1.html#ASN1-VERSION:CAPS" title="ASN1_VERSION">ASN1_VERSION</a>, macro in <a class="link" href="libtasn1-libtasn1.html" title="libtasn1">libtasn1</a> +</dt> +<dd></dd> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/home.png b/doc/reference/html/home.png Binary files differnew file mode 100644 index 0000000..9346b33 --- /dev/null +++ b/doc/reference/html/home.png diff --git a/doc/reference/html/index.html b/doc/reference/html/index.html new file mode 100644 index 0000000..b768d18 --- /dev/null +++ b/doc/reference/html/index.html @@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>GNU Libtasn1 API Reference Manual: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="next" href="intro.html" title="GNU Libtasn1 API Reference Manual"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<div class="book"> +<div class="titlepage"> +<div> +<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GNU Libtasn1 API Reference Manual</p></th></tr></table></div> +<div><p class="releaseinfo"> + for GNU Libtasn1 4.7 +. + The latest version of this documentation can be found on-line at + <a class="ulink" href="https://www.gnu.org/software/libtasn1/reference/" target="_top">https://www.gnu.org/software/libtasn1/reference/</a>. + </p></div> +</div> +<hr> +</div> +<div class="toc"><dl class="toc"> +<dt><span class="chapter"><a href="intro.html">GNU Libtasn1 API Reference Manual</a></span></dt> +<dd><dl><dt> +<span class="refentrytitle"><a href="libtasn1-libtasn1.html">libtasn1</a></span><span class="refpurpose"></span> +</dt></dl></dd> +<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt> +<dt><span class="index"><a href="ix02.html">Index of deprecated symbols</a></span></dt> +<dt><span class="index"><a href="ix03.html">Index of new symbols in 1.6</a></span></dt> +<dt><span class="index"><a href="ix04.html">Index of new symbols in 2.0</a></span></dt> +</dl></div> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/index.sgml b/doc/reference/html/index.sgml new file mode 100644 index 0000000..5b6a18f --- /dev/null +++ b/doc/reference/html/index.sgml @@ -0,0 +1,58 @@ +<ONLINE href="https://www.gnu.org/software/libtasn1/reference/"> +<ANCHOR id="libtasn1-libtasn1" href="libtasn1/libtasn1-libtasn1.html"> +<ANCHOR id="libtasn1-libtasn1.other" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.other"> +<ANCHOR id="libtasn1-libtasn1.description" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.description"> +<ANCHOR id="libtasn1-libtasn1.functions_details" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.functions_details"> +<ANCHOR id="libtasn1-libtasn1.other_details" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.other_details"> +<ANCHOR id="ASN1-API:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-API:CAPS"> +<ANCHOR id="ASN1-VERSION:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-VERSION:CAPS"> +<ANCHOR id="ASN1-SUCCESS:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS"> +<ANCHOR id="ASN1-FILE-NOT-FOUND:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS"> +<ANCHOR id="ASN1-ELEMENT-NOT-FOUND:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS"> +<ANCHOR id="ASN1-IDENTIFIER-NOT-FOUND:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS"> +<ANCHOR id="ASN1-DER-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS"> +<ANCHOR id="ASN1-VALUE-NOT-FOUND:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS"> +<ANCHOR id="ASN1-GENERIC-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS"> +<ANCHOR id="ASN1-VALUE-NOT-VALID:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS"> +<ANCHOR id="ASN1-TAG-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS"> +<ANCHOR id="ASN1-TAG-IMPLICIT:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS"> +<ANCHOR id="ASN1-ERROR-TYPE-ANY:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS"> +<ANCHOR id="ASN1-SYNTAX-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS"> +<ANCHOR id="ASN1-MEM-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS"> +<ANCHOR id="ASN1-MEM-ALLOC-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS"> +<ANCHOR id="ASN1-DER-OVERFLOW:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS"> +<ANCHOR id="ASN1-NAME-TOO-LONG:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS"> +<ANCHOR id="ASN1-ARRAY-ERROR:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS"> +<ANCHOR id="ASN1-ELEMENT-NOT-EMPTY:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS"> +<ANCHOR id="ASN1-PRINT-NAME:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS"> +<ANCHOR id="ASN1-PRINT-NAME-TYPE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS"> +<ANCHOR id="ASN1-PRINT-NAME-TYPE-VALUE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS"> +<ANCHOR id="ASN1-PRINT-ALL:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS"> +<ANCHOR id="ASN1-CLASS-UNIVERSAL:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS"> +<ANCHOR id="ASN1-CLASS-APPLICATION:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS"> +<ANCHOR id="ASN1-CLASS-CONTEXT-SPECIFIC:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS"> +<ANCHOR id="ASN1-CLASS-PRIVATE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS"> +<ANCHOR id="ASN1-CLASS-STRUCTURED:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS"> +<ANCHOR id="ASN1-TAG-BOOLEAN:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS"> +<ANCHOR id="ASN1-TAG-INTEGER:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS"> +<ANCHOR id="ASN1-TAG-SEQUENCE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS"> +<ANCHOR id="ASN1-TAG-SET:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS"> +<ANCHOR id="ASN1-TAG-OCTET-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-BIT-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-UTCTime" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-UTCTime"> +<ANCHOR id="ASN1-TAG-GENERALIZEDTime" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime"> +<ANCHOR id="ASN1-TAG-OBJECT-ID:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS"> +<ANCHOR id="ASN1-TAG-ENUMERATED:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS"> +<ANCHOR id="ASN1-TAG-NULL:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS"> +<ANCHOR id="ASN1-TAG-GENERALSTRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS"> +<ANCHOR id="ASN1-TAG-NUMERIC-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-NUMERIC-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-IA5-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-IA5-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-TELETEX-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-TELETEX-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-PRINTABLE-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-PRINTABLE-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-UNIVERSAL-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-UNIVERSAL-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-BMP-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-BMP-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-UTF8-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-UTF8-STRING:CAPS"> +<ANCHOR id="ASN1-TAG-VISIBLE-STRING:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TAG-VISIBLE-STRING:CAPS"> +<ANCHOR id="asn1-node-st" href="libtasn1/libtasn1-libtasn1.html#asn1-node-st"> +<ANCHOR id="asn1-node" href="libtasn1/libtasn1-libtasn1.html#asn1-node"> +<ANCHOR id="ASN1-MAX-NAME-SIZE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS"> diff --git a/doc/reference/html/intro.html b/doc/reference/html/intro.html new file mode 100644 index 0000000..8718185 --- /dev/null +++ b/doc/reference/html/intro.html @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>GNU Libtasn1 API Reference Manual: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="up" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="prev" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="next" href="libtasn1-libtasn1.html" title="libtasn1"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> +<td width="100%" align="left" class="shortcuts"></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> +<td><img src="up-insensitive.png" width="16" height="16" border="0"></td> +<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> +<td><a accesskey="n" href="libtasn1-libtasn1.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> +</tr></table> +<div class="chapter"> +<div class="titlepage"><div><div><h1 class="title"> +<a name="intro"></a>GNU Libtasn1 API Reference Manual</h1></div></div></div> +<div class="toc"><dl class="toc"><dt> +<span class="refentrytitle"><a href="libtasn1-libtasn1.html">libtasn1</a></span><span class="refpurpose"></span> +</dt></dl></div> +<p> + This document describes the GNU Libtasn1 library developed for + ASN.1 (Abstract Syntax Notation One) structures management and + DER (Distinguished Encoding Rules) encoding functions. + </p> +<p> + More up to date information can be found at + <a class="ulink" href="https://www.gnu.org/software/libtasn1/" target="_top"> + https://www.gnu.org/software/libtasn1/</a>. + </p> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/ix02.html b/doc/reference/html/ix02.html new file mode 100644 index 0000000..cbaabcf --- /dev/null +++ b/doc/reference/html/ix02.html @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Index of deprecated symbols: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="up" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="prev" href="api-index-full.html" title="API Index"> +<link rel="next" href="ix03.html" title="Index of new symbols in 1.6"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> +<td width="100%" align="left" class="shortcuts"></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> +<td><img src="up-insensitive.png" width="16" height="16" border="0"></td> +<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> +<td><a accesskey="n" href="ix03.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> +</tr></table> +<div class="index"> +<div class="titlepage"><div><div><h1 class="title"> +<a name="id-1.4"></a>Index of deprecated symbols</h1></div></div></div> +<div class="index"></div> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/ix03.html b/doc/reference/html/ix03.html new file mode 100644 index 0000000..6d9c0a0 --- /dev/null +++ b/doc/reference/html/ix03.html @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Index of new symbols in 1.6: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="up" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="prev" href="ix02.html" title="Index of deprecated symbols"> +<link rel="next" href="ix04.html" title="Index of new symbols in 2.0"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> +<td width="100%" align="left" class="shortcuts"></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> +<td><img src="up-insensitive.png" width="16" height="16" border="0"></td> +<td><a accesskey="p" href="ix02.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> +<td><a accesskey="n" href="ix04.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> +</tr></table> +<div class="index"> +<div class="titlepage"><div><div><h1 class="title"> +<a name="id-1.5"></a>Index of new symbols in 1.6</h1></div></div></div> +<div class="index"></div> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/ix04.html b/doc/reference/html/ix04.html new file mode 100644 index 0000000..7b97412 --- /dev/null +++ b/doc/reference/html/ix04.html @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Index of new symbols in 2.0: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="up" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="prev" href="ix03.html" title="Index of new symbols in 1.6"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> +<td width="100%" align="left" class="shortcuts"></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> +<td><img src="up-insensitive.png" width="16" height="16" border="0"></td> +<td><a accesskey="p" href="ix03.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> +<td><img src="right-insensitive.png" width="16" height="16" border="0"></td> +</tr></table> +<div class="index"> +<div class="titlepage"><div><div><h1 class="title"> +<a name="id-1.6"></a>Index of new symbols in 2.0</h1></div></div></div> +<div class="index"></div> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/left-insensitive.png b/doc/reference/html/left-insensitive.png Binary files differnew file mode 100644 index 0000000..3269393 --- /dev/null +++ b/doc/reference/html/left-insensitive.png diff --git a/doc/reference/html/left.png b/doc/reference/html/left.png Binary files differnew file mode 100644 index 0000000..2abde03 --- /dev/null +++ b/doc/reference/html/left.png diff --git a/doc/reference/html/libtasn1-libtasn1.html b/doc/reference/html/libtasn1-libtasn1.html new file mode 100644 index 0000000..74c0b59 --- /dev/null +++ b/doc/reference/html/libtasn1-libtasn1.html @@ -0,0 +1,684 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>libtasn1: GNU Libtasn1 API Reference Manual</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="up" href="intro.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="prev" href="intro.html" title="GNU Libtasn1 API Reference Manual"> +<link rel="next" href="api-index-full.html" title="API Index"> +<meta name="generator" content="GTK-Doc V1.24 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> +<td width="100%" align="left" class="shortcuts"> +<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> + <a href="#libtasn1-libtasn1.description" class="shortcut">Description</a></span> +</td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> +<td><a accesskey="u" href="intro.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> +<td><a accesskey="p" href="intro.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> +<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> +</tr></table> +<div class="refentry"> +<a name="libtasn1-libtasn1"></a><div class="titlepage"></div> +<div class="refnamediv"><table width="100%"><tr> +<td valign="top"> +<h2><span class="refentrytitle"><a name="libtasn1-libtasn1.top_of_page"></a>libtasn1</span></h2> +<p>libtasn1</p> +</td> +<td class="gallery_image" valign="top" align="right"></td> +</tr></table></div> +<div class="refsect1"> +<a name="libtasn1-libtasn1.other"></a><h2>Types and Values</h2> +<div class="informaltable"><table width="100%" border="0"> +<colgroup> +<col width="150px" class="name"> +<col class="description"> +</colgroup> +<tbody> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-API:CAPS" title="ASN1_API">ASN1_API</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-VERSION:CAPS" title="ASN1_VERSION">ASN1_VERSION</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS">ASN1_SUCCESS</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS" title="ASN1_FILE_NOT_FOUND">ASN1_FILE_NOT_FOUND</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND">ASN1_ELEMENT_NOT_FOUND</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS" title="ASN1_IDENTIFIER_NOT_FOUND">ASN1_IDENTIFIER_NOT_FOUND</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS" title="ASN1_DER_ERROR">ASN1_DER_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS" title="ASN1_VALUE_NOT_FOUND">ASN1_VALUE_NOT_FOUND</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS" title="ASN1_GENERIC_ERROR">ASN1_GENERIC_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS" title="ASN1_VALUE_NOT_VALID">ASN1_VALUE_NOT_VALID</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS" title="ASN1_TAG_ERROR">ASN1_TAG_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS" title="ASN1_TAG_IMPLICIT">ASN1_TAG_IMPLICIT</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS" title="ASN1_ERROR_TYPE_ANY">ASN1_ERROR_TYPE_ANY</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS" title="ASN1_SYNTAX_ERROR">ASN1_SYNTAX_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS" title="ASN1_MEM_ERROR">ASN1_MEM_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS" title="ASN1_MEM_ALLOC_ERROR">ASN1_MEM_ALLOC_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS" title="ASN1_DER_OVERFLOW">ASN1_DER_OVERFLOW</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS" title="ASN1_NAME_TOO_LONG">ASN1_NAME_TOO_LONG</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS" title="ASN1_ARRAY_ERROR">ASN1_ARRAY_ERROR</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS" title="ASN1_ELEMENT_NOT_EMPTY">ASN1_ELEMENT_NOT_EMPTY</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS" title="ASN1_PRINT_NAME">ASN1_PRINT_NAME</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS" title="ASN1_PRINT_NAME_TYPE">ASN1_PRINT_NAME_TYPE</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS" title="ASN1_PRINT_NAME_TYPE_VALUE">ASN1_PRINT_NAME_TYPE_VALUE</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS" title="ASN1_PRINT_ALL">ASN1_PRINT_ALL</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS" title="ASN1_CLASS_UNIVERSAL">ASN1_CLASS_UNIVERSAL</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS" title="ASN1_CLASS_APPLICATION">ASN1_CLASS_APPLICATION</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS" title="ASN1_CLASS_CONTEXT_SPECIFIC">ASN1_CLASS_CONTEXT_SPECIFIC</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS" title="ASN1_CLASS_PRIVATE">ASN1_CLASS_PRIVATE</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS" title="ASN1_CLASS_STRUCTURED">ASN1_CLASS_STRUCTURED</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS" title="ASN1_TAG_BOOLEAN">ASN1_TAG_BOOLEAN</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS" title="ASN1_TAG_INTEGER">ASN1_TAG_INTEGER</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS" title="ASN1_TAG_SEQUENCE">ASN1_TAG_SEQUENCE</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS" title="ASN1_TAG_SET">ASN1_TAG_SET</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS" title="ASN1_TAG_OCTET_STRING">ASN1_TAG_OCTET_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS" title="ASN1_TAG_BIT_STRING">ASN1_TAG_BIT_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UTCTime" title="ASN1_TAG_UTCTime">ASN1_TAG_UTCTime</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime" title="ASN1_TAG_GENERALIZEDTime">ASN1_TAG_GENERALIZEDTime</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS" title="ASN1_TAG_OBJECT_ID">ASN1_TAG_OBJECT_ID</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS" title="ASN1_TAG_ENUMERATED">ASN1_TAG_ENUMERATED</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS" title="ASN1_TAG_NULL">ASN1_TAG_NULL</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS" title="ASN1_TAG_GENERALSTRING">ASN1_TAG_GENERALSTRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-NUMERIC-STRING:CAPS" title="ASN1_TAG_NUMERIC_STRING">ASN1_TAG_NUMERIC_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-IA5-STRING:CAPS" title="ASN1_TAG_IA5_STRING">ASN1_TAG_IA5_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-TELETEX-STRING:CAPS" title="ASN1_TAG_TELETEX_STRING">ASN1_TAG_TELETEX_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-PRINTABLE-STRING:CAPS" title="ASN1_TAG_PRINTABLE_STRING">ASN1_TAG_PRINTABLE_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UNIVERSAL-STRING:CAPS" title="ASN1_TAG_UNIVERSAL_STRING">ASN1_TAG_UNIVERSAL_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BMP-STRING:CAPS" title="ASN1_TAG_BMP_STRING">ASN1_TAG_BMP_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UTF8-STRING:CAPS" title="ASN1_TAG_UTF8_STRING">ASN1_TAG_UTF8_STRING</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-VISIBLE-STRING:CAPS" title="ASN1_TAG_VISIBLE_STRING">ASN1_TAG_VISIBLE_STRING</a></td> +</tr> +<tr> +<td class="typedef_keyword">typedef</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#asn1-node-st" title="asn1_node_st">asn1_node_st</a></td> +</tr> +<tr> +<td class="typedef_keyword">typedef</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#asn1-node" title="asn1_node">asn1_node</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS" title="ASN1_MAX_NAME_SIZE">ASN1_MAX_NAME_SIZE</a></td> +</tr> +</tbody> +</table></div> +</div> +<div class="refsect1"> +<a name="libtasn1-libtasn1.description"></a><h2>Description</h2> +<p> +</p> +</div> +<div class="refsect1"> +<a name="libtasn1-libtasn1.functions_details"></a><h2>Functions</h2> +<p></p> +</div> +<div class="refsect1"> +<a name="libtasn1-libtasn1.other_details"></a><h2>Types and Values</h2> +<div class="refsect2"> +<a name="ASN1-API:CAPS"></a><h3>ASN1_API</h3> +<pre class="programlisting">#define ASN1_API __attribute__((__visibility__("default"))) +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-VERSION:CAPS"></a><h3>ASN1_VERSION</h3> +<pre class="programlisting">#define ASN1_VERSION "4.7" +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-SUCCESS:CAPS"></a><h3>ASN1_SUCCESS</h3> +<pre class="programlisting">#define ASN1_SUCCESS 0 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-FILE-NOT-FOUND:CAPS"></a><h3>ASN1_FILE_NOT_FOUND</h3> +<pre class="programlisting">#define ASN1_FILE_NOT_FOUND 1 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-ELEMENT-NOT-FOUND:CAPS"></a><h3>ASN1_ELEMENT_NOT_FOUND</h3> +<pre class="programlisting">#define ASN1_ELEMENT_NOT_FOUND 2 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-IDENTIFIER-NOT-FOUND:CAPS"></a><h3>ASN1_IDENTIFIER_NOT_FOUND</h3> +<pre class="programlisting">#define ASN1_IDENTIFIER_NOT_FOUND 3 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-DER-ERROR:CAPS"></a><h3>ASN1_DER_ERROR</h3> +<pre class="programlisting">#define ASN1_DER_ERROR 4 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-VALUE-NOT-FOUND:CAPS"></a><h3>ASN1_VALUE_NOT_FOUND</h3> +<pre class="programlisting">#define ASN1_VALUE_NOT_FOUND 5 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-GENERIC-ERROR:CAPS"></a><h3>ASN1_GENERIC_ERROR</h3> +<pre class="programlisting">#define ASN1_GENERIC_ERROR 6 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-VALUE-NOT-VALID:CAPS"></a><h3>ASN1_VALUE_NOT_VALID</h3> +<pre class="programlisting">#define ASN1_VALUE_NOT_VALID 7 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-ERROR:CAPS"></a><h3>ASN1_TAG_ERROR</h3> +<pre class="programlisting">#define ASN1_TAG_ERROR 8 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-IMPLICIT:CAPS"></a><h3>ASN1_TAG_IMPLICIT</h3> +<pre class="programlisting">#define ASN1_TAG_IMPLICIT 9 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-ERROR-TYPE-ANY:CAPS"></a><h3>ASN1_ERROR_TYPE_ANY</h3> +<pre class="programlisting">#define ASN1_ERROR_TYPE_ANY 10 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-SYNTAX-ERROR:CAPS"></a><h3>ASN1_SYNTAX_ERROR</h3> +<pre class="programlisting">#define ASN1_SYNTAX_ERROR 11 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-MEM-ERROR:CAPS"></a><h3>ASN1_MEM_ERROR</h3> +<pre class="programlisting">#define ASN1_MEM_ERROR 12 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-MEM-ALLOC-ERROR:CAPS"></a><h3>ASN1_MEM_ALLOC_ERROR</h3> +<pre class="programlisting">#define ASN1_MEM_ALLOC_ERROR 13 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-DER-OVERFLOW:CAPS"></a><h3>ASN1_DER_OVERFLOW</h3> +<pre class="programlisting">#define ASN1_DER_OVERFLOW 14 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-NAME-TOO-LONG:CAPS"></a><h3>ASN1_NAME_TOO_LONG</h3> +<pre class="programlisting">#define ASN1_NAME_TOO_LONG 15 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-ARRAY-ERROR:CAPS"></a><h3>ASN1_ARRAY_ERROR</h3> +<pre class="programlisting">#define ASN1_ARRAY_ERROR 16 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-ELEMENT-NOT-EMPTY:CAPS"></a><h3>ASN1_ELEMENT_NOT_EMPTY</h3> +<pre class="programlisting">#define ASN1_ELEMENT_NOT_EMPTY 17 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-PRINT-NAME:CAPS"></a><h3>ASN1_PRINT_NAME</h3> +<pre class="programlisting">#define ASN1_PRINT_NAME 1 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-PRINT-NAME-TYPE:CAPS"></a><h3>ASN1_PRINT_NAME_TYPE</h3> +<pre class="programlisting">#define ASN1_PRINT_NAME_TYPE 2 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-PRINT-NAME-TYPE-VALUE:CAPS"></a><h3>ASN1_PRINT_NAME_TYPE_VALUE</h3> +<pre class="programlisting">#define ASN1_PRINT_NAME_TYPE_VALUE 3 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-PRINT-ALL:CAPS"></a><h3>ASN1_PRINT_ALL</h3> +<pre class="programlisting">#define ASN1_PRINT_ALL 4 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-CLASS-UNIVERSAL:CAPS"></a><h3>ASN1_CLASS_UNIVERSAL</h3> +<pre class="programlisting">#define ASN1_CLASS_UNIVERSAL 0x00 /* old: 1 */ +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-CLASS-APPLICATION:CAPS"></a><h3>ASN1_CLASS_APPLICATION</h3> +<pre class="programlisting">#define ASN1_CLASS_APPLICATION 0x40 /* old: 2 */ +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-CLASS-CONTEXT-SPECIFIC:CAPS"></a><h3>ASN1_CLASS_CONTEXT_SPECIFIC</h3> +<pre class="programlisting">#define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */ +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-CLASS-PRIVATE:CAPS"></a><h3>ASN1_CLASS_PRIVATE</h3> +<pre class="programlisting">#define ASN1_CLASS_PRIVATE 0xC0 /* old: 4 */ +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-CLASS-STRUCTURED:CAPS"></a><h3>ASN1_CLASS_STRUCTURED</h3> +<pre class="programlisting">#define ASN1_CLASS_STRUCTURED 0x20 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-BOOLEAN:CAPS"></a><h3>ASN1_TAG_BOOLEAN</h3> +<pre class="programlisting">#define ASN1_TAG_BOOLEAN 0x01 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-INTEGER:CAPS"></a><h3>ASN1_TAG_INTEGER</h3> +<pre class="programlisting">#define ASN1_TAG_INTEGER 0x02 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-SEQUENCE:CAPS"></a><h3>ASN1_TAG_SEQUENCE</h3> +<pre class="programlisting">#define ASN1_TAG_SEQUENCE 0x10 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-SET:CAPS"></a><h3>ASN1_TAG_SET</h3> +<pre class="programlisting">#define ASN1_TAG_SET 0x11 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-OCTET-STRING:CAPS"></a><h3>ASN1_TAG_OCTET_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_OCTET_STRING 0x04 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-BIT-STRING:CAPS"></a><h3>ASN1_TAG_BIT_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_BIT_STRING 0x03 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-UTCTime"></a><h3>ASN1_TAG_UTCTime</h3> +<pre class="programlisting">#define ASN1_TAG_UTCTime 0x17 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-GENERALIZEDTime"></a><h3>ASN1_TAG_GENERALIZEDTime</h3> +<pre class="programlisting">#define ASN1_TAG_GENERALIZEDTime 0x18 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-OBJECT-ID:CAPS"></a><h3>ASN1_TAG_OBJECT_ID</h3> +<pre class="programlisting">#define ASN1_TAG_OBJECT_ID 0x06 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-ENUMERATED:CAPS"></a><h3>ASN1_TAG_ENUMERATED</h3> +<pre class="programlisting">#define ASN1_TAG_ENUMERATED 0x0A +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-NULL:CAPS"></a><h3>ASN1_TAG_NULL</h3> +<pre class="programlisting">#define ASN1_TAG_NULL 0x05 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-GENERALSTRING:CAPS"></a><h3>ASN1_TAG_GENERALSTRING</h3> +<pre class="programlisting">#define ASN1_TAG_GENERALSTRING 0x1B +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-NUMERIC-STRING:CAPS"></a><h3>ASN1_TAG_NUMERIC_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_NUMERIC_STRING 0x12 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-IA5-STRING:CAPS"></a><h3>ASN1_TAG_IA5_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_IA5_STRING 0x16 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-TELETEX-STRING:CAPS"></a><h3>ASN1_TAG_TELETEX_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_TELETEX_STRING 0x14 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-PRINTABLE-STRING:CAPS"></a><h3>ASN1_TAG_PRINTABLE_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_PRINTABLE_STRING 0x13 +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-UNIVERSAL-STRING:CAPS"></a><h3>ASN1_TAG_UNIVERSAL_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_UNIVERSAL_STRING 0x1C +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-BMP-STRING:CAPS"></a><h3>ASN1_TAG_BMP_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_BMP_STRING 0x1E +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-UTF8-STRING:CAPS"></a><h3>ASN1_TAG_UTF8_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_UTF8_STRING 0x0C +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-TAG-VISIBLE-STRING:CAPS"></a><h3>ASN1_TAG_VISIBLE_STRING</h3> +<pre class="programlisting">#define ASN1_TAG_VISIBLE_STRING 0x1A +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="asn1-node-st"></a><h3>asn1_node_st</h3> +<pre class="programlisting"> typedef struct asn1_node_st asn1_node_st; +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="asn1-node"></a><h3>asn1_node</h3> +<pre class="programlisting"> typedef asn1_node_st *asn1_node; +</pre> +<p> +</p> +</div> +<hr> +<div class="refsect2"> +<a name="ASN1-MAX-NAME-SIZE:CAPS"></a><h3>ASN1_MAX_NAME_SIZE</h3> +<pre class="programlisting">#define ASN1_MAX_NAME_SIZE 64 +</pre> +<p> +</p> +</div> +</div> +</div> +<div class="footer"> +<hr>Generated by GTK-Doc V1.24</div> +</body> +</html>
\ No newline at end of file diff --git a/doc/reference/html/libtasn1.devhelp2 b/doc/reference/html/libtasn1.devhelp2 new file mode 100644 index 0000000..ce4d54a --- /dev/null +++ b/doc/reference/html/libtasn1.devhelp2 @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<book xmlns="http://www.devhelp.net/book" title="GNU Libtasn1 API Reference Manual" link="index.html" author="" name="libtasn1" version="2" language="c"> + <chapters> + <sub name="GNU Libtasn1 API Reference Manual" link="intro.html"> + <sub name="libtasn1" link="libtasn1-libtasn1.html"/> + </sub> + <sub name="API Index" link="api-index-full.html"/> + <sub name="Index of deprecated symbols" link="ix02.html"/> + <sub name="Index of new symbols in 1.6" link="ix03.html"/> + <sub name="Index of new symbols in 2.0" link="ix04.html"/> + </chapters> + <functions> + <keyword type="macro" name="ASN1_API" link="libtasn1-libtasn1.html#ASN1-API:CAPS"/> + <keyword type="macro" name="ASN1_VERSION" link="libtasn1-libtasn1.html#ASN1-VERSION:CAPS"/> + <keyword type="macro" name="ASN1_SUCCESS" link="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS"/> + <keyword type="macro" name="ASN1_FILE_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS"/> + <keyword type="macro" name="ASN1_ELEMENT_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS"/> + <keyword type="macro" name="ASN1_IDENTIFIER_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS"/> + <keyword type="macro" name="ASN1_DER_ERROR" link="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_VALUE_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS"/> + <keyword type="macro" name="ASN1_GENERIC_ERROR" link="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_VALUE_NOT_VALID" link="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS"/> + <keyword type="macro" name="ASN1_TAG_ERROR" link="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_TAG_IMPLICIT" link="libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS"/> + <keyword type="macro" name="ASN1_ERROR_TYPE_ANY" link="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS"/> + <keyword type="macro" name="ASN1_SYNTAX_ERROR" link="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_MEM_ERROR" link="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_MEM_ALLOC_ERROR" link="libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_DER_OVERFLOW" link="libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS"/> + <keyword type="macro" name="ASN1_NAME_TOO_LONG" link="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS"/> + <keyword type="macro" name="ASN1_ARRAY_ERROR" link="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS"/> + <keyword type="macro" name="ASN1_ELEMENT_NOT_EMPTY" link="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS"/> + <keyword type="macro" name="ASN1_PRINT_NAME" link="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS"/> + <keyword type="macro" name="ASN1_PRINT_NAME_TYPE" link="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS"/> + <keyword type="macro" name="ASN1_PRINT_NAME_TYPE_VALUE" link="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS"/> + <keyword type="macro" name="ASN1_PRINT_ALL" link="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS"/> + <keyword type="macro" name="ASN1_CLASS_UNIVERSAL" link="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS"/> + <keyword type="macro" name="ASN1_CLASS_APPLICATION" link="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS"/> + <keyword type="macro" name="ASN1_CLASS_CONTEXT_SPECIFIC" link="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS"/> + <keyword type="macro" name="ASN1_CLASS_PRIVATE" link="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS"/> + <keyword type="macro" name="ASN1_CLASS_STRUCTURED" link="libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS"/> + <keyword type="macro" name="ASN1_TAG_BOOLEAN" link="libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS"/> + <keyword type="macro" name="ASN1_TAG_INTEGER" link="libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS"/> + <keyword type="macro" name="ASN1_TAG_SEQUENCE" link="libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS"/> + <keyword type="macro" name="ASN1_TAG_SET" link="libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS"/> + <keyword type="macro" name="ASN1_TAG_OCTET_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_BIT_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_UTCTime" link="libtasn1-libtasn1.html#ASN1-TAG-UTCTime"/> + <keyword type="macro" name="ASN1_TAG_GENERALIZEDTime" link="libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime"/> + <keyword type="macro" name="ASN1_TAG_OBJECT_ID" link="libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS"/> + <keyword type="macro" name="ASN1_TAG_ENUMERATED" link="libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS"/> + <keyword type="macro" name="ASN1_TAG_NULL" link="libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS"/> + <keyword type="macro" name="ASN1_TAG_GENERALSTRING" link="libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_NUMERIC_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-NUMERIC-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_IA5_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-IA5-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_TELETEX_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-TELETEX-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_PRINTABLE_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-PRINTABLE-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_UNIVERSAL_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-UNIVERSAL-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_BMP_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-BMP-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_UTF8_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-UTF8-STRING:CAPS"/> + <keyword type="macro" name="ASN1_TAG_VISIBLE_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-VISIBLE-STRING:CAPS"/> + <keyword type="typedef" name="asn1_node_st" link="libtasn1-libtasn1.html#asn1-node-st"/> + <keyword type="typedef" name="asn1_node" link="libtasn1-libtasn1.html#asn1-node"/> + <keyword type="macro" name="ASN1_MAX_NAME_SIZE" link="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS"/> + </functions> +</book> diff --git a/doc/reference/html/right-insensitive.png b/doc/reference/html/right-insensitive.png Binary files differnew file mode 100644 index 0000000..4c95785 --- /dev/null +++ b/doc/reference/html/right-insensitive.png diff --git a/doc/reference/html/right.png b/doc/reference/html/right.png Binary files differnew file mode 100644 index 0000000..76260ec --- /dev/null +++ b/doc/reference/html/right.png diff --git a/doc/reference/html/style.css b/doc/reference/html/style.css new file mode 100644 index 0000000..3675420 --- /dev/null +++ b/doc/reference/html/style.css @@ -0,0 +1,479 @@ +body +{ + font-family: cantarell, sans-serif; +} +.synopsis, .classsynopsis +{ + /* tango:aluminium 1/2 */ + background: #eeeeec; + background: rgba(238, 238, 236, 0.5); + border: solid 1px rgb(238, 238, 236); + padding: 0.5em; +} +.programlisting +{ + /* tango:sky blue 0/1 */ + /* fallback for no rgba support */ + background: #e6f3ff; + border: solid 1px #729fcf; + background: rgba(114, 159, 207, 0.1); + border: solid 1px rgba(114, 159, 207, 0.2); + padding: 0.5em; +} +.variablelist +{ + padding: 4px; + margin-left: 3em; +} +.variablelist td:first-child +{ + vertical-align: top; +} + +div.gallery-float +{ + float: left; + padding: 10px; +} +div.gallery-float img +{ + border-style: none; +} +div.gallery-spacer +{ + clear: both; +} + +a, a:visited +{ + text-decoration: none; + /* tango:sky blue 2 */ + color: #3465a4; +} +a:hover +{ + text-decoration: underline; + /* tango:sky blue 1 */ + color: #729fcf; +} + +div.informaltable table +{ + border-collapse: separate; + border-spacing: 1em 0.3em; + border: none; +} + +div.informaltable table td, div.informaltable table th +{ + vertical-align: top; +} + +.function_type, +.variable_type, +.property_type, +.signal_type, +.parameter_name, +.struct_member_name, +.union_member_name, +.define_keyword, +.datatype_keyword, +.typedef_keyword +{ + text-align: right; +} + +/* dim non-primary columns */ +.c_punctuation, +.function_type, +.variable_type, +.property_type, +.signal_type, +.define_keyword, +.datatype_keyword, +.typedef_keyword, +.property_flags, +.signal_flags, +.parameter_annotations, +.enum_member_annotations, +.struct_member_annotations, +.union_member_annotations +{ + color: #888a85; +} + +.function_type a, +.function_type a:visited, +.function_type a:hover, +.property_type a, +.property_type a:visited, +.property_type a:hover, +.signal_type a, +.signal_type a:visited, +.signal_type a:hover, +.signal_flags a, +.signal_flags a:visited, +.signal_flags a:hover +{ + color: #729fcf; +} + +td p +{ + margin: 0.25em; +} + +div.table table +{ + border-collapse: collapse; + border-spacing: 0px; + /* tango:aluminium 3 */ + border: solid 1px #babdb6; +} + +div.table table td, div.table table th +{ + /* tango:aluminium 3 */ + border: solid 1px #babdb6; + padding: 3px; + vertical-align: top; +} + +div.table table th +{ + /* tango:aluminium 2 */ + background-color: #d3d7cf; +} + +h4 +{ + color: #555753; + margin-top: 1em; + margin-bottom: 1em; +} + +hr +{ + /* tango:aluminium 1 */ + color: #d3d7cf; + background: #d3d7cf; + border: none 0px; + height: 1px; + clear: both; + margin: 2.0em 0em 2.0em 0em; +} + +dl.toc dt +{ + padding-bottom: 0.25em; +} + +dl.toc > dt +{ + padding-top: 0.25em; + padding-bottom: 0.25em; + font-weight: bold; +} + +dl.toc > dl +{ + padding-bottom: 0.5em; +} + +.parameter +{ + font-style: normal; +} + +.footer +{ + padding-top: 3.5em; + /* tango:aluminium 3 */ + color: #babdb6; + text-align: center; + font-size: 80%; +} + +.informalfigure, +.figure +{ + margin: 1em; +} + +.informalexample, +.example +{ + margin-top: 1em; + margin-bottom: 1em; +} + +.warning +{ + /* tango:orange 0/1 */ + background: #ffeed9; + background: rgba(252, 175, 62, 0.1); + border-color: #ffb04f; + border-color: rgba(252, 175, 62, 0.2); +} +.note +{ + /* tango:chameleon 0/0.5 */ + background: #d8ffb2; + background: rgba(138, 226, 52, 0.1); + border-color: #abf562; + border-color: rgba(138, 226, 52, 0.2); +} +div.blockquote +{ + border-color: #eeeeec; +} +.note, .warning, div.blockquote +{ + padding: 0.5em; + border-width: 1px; + border-style: solid; + margin: 2em; +} +.note p, .warning p +{ + margin: 0; +} + +div.warning h3.title, +div.note h3.title +{ + display: none; +} + +p + div.section +{ + margin-top: 1em; +} + +div.refnamediv, +div.refsynopsisdiv, +div.refsect1, +div.refsect2, +div.toc, +div.section +{ + margin-bottom: 1em; +} + +/* blob links */ +h2 .extralinks, h3 .extralinks +{ + float: right; + /* tango:aluminium 3 */ + color: #babdb6; + font-size: 80%; + font-weight: normal; +} + +.lineart +{ + color: #d3d7cf; + font-weight: normal; +} + +.annotation +{ + /* tango:aluminium 5 */ + color: #555753; + font-weight: normal; +} + +.structfield +{ + font-style: normal; + font-weight: normal; +} + +acronym,abbr +{ + border-bottom: 1px dotted gray; +} + +/* code listings */ + +.listing_code .programlisting .normal, +.listing_code .programlisting .normal a, +.listing_code .programlisting .number, +.listing_code .programlisting .cbracket, +.listing_code .programlisting .symbol { color: #555753; } +.listing_code .programlisting .comment, +.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ +.listing_code .programlisting .function, +.listing_code .programlisting .function a, +.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ +.listing_code .programlisting .string { color: #ad7fa8; } /* tango: plum */ +.listing_code .programlisting .keyword, +.listing_code .programlisting .usertype, +.listing_code .programlisting .type, +.listing_code .programlisting .type a { color: #4e9a06; } /* tango: chameleon 3 */ + +.listing_frame { + /* tango:sky blue 1 */ + border: solid 1px #729fcf; + border: solid 1px rgba(114, 159, 207, 0.2); + padding: 0px; +} + +.listing_lines, .listing_code { + margin-top: 0px; + margin-bottom: 0px; + padding: 0.5em; +} +.listing_lines { + /* tango:sky blue 0.5 */ + background: #a6c5e3; + background: rgba(114, 159, 207, 0.2); + /* tango:aluminium 6 */ + color: #2e3436; +} +.listing_code { + /* tango:sky blue 0 */ + background: #e6f3ff; + background: rgba(114, 159, 207, 0.1); +} +.listing_code .programlisting { + /* override from previous */ + border: none 0px; + padding: 0px; + background: none; +} +.listing_lines pre, .listing_code pre { + margin: 0px; +} + +@media screen { + /* these have a <sup> as a first child, but since there are no parent selectors + * we can't use that. */ + a.footnote + { + position: relative; + top: 0em ! important; + } + /* this is needed so that the local anchors are displayed below the naviagtion */ + div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] + { + display: inline-block; + position: relative; + top:-5em; + } + /* this seems to be a bug in the xsl style sheets when generating indexes */ + div.index div.index + { + top: 0em; + } + /* make space for the fixed navigation bar and add space at the bottom so that + * link targets appear somewhat close to top + */ + body + { + padding-top: 2.5em; + padding-bottom: 500px; + max-width: 60em; + } + p + { + max-width: 60em; + } + /* style and size the navigation bar */ + table.navigation#top + { + position: fixed; + background: #e2e2e2; + border-bottom: solid 1px #babdb6; + border-spacing: 5px; + margin-top: 0; + margin-bottom: 0; + top: 0; + left: 0; + z-index: 10; + } + table.navigation#top td + { + padding-left: 6px; + padding-right: 6px; + } + .navigation a, .navigation a:visited + { + /* tango:sky blue 3 */ + color: #204a87; + } + .navigation a:hover + { + /* tango:sky blue 2 */ + color: #3465a4; + } + td.shortcuts + { + /* tango:sky blue 2 */ + color: #3465a4; + font-size: 80%; + white-space: nowrap; + } + td.shortcuts .dim + { + color: #babdb6; + } + .navigation .title + { + font-size: 80%; + max-width: none; + margin: 0px; + font-weight: normal; + } +} +@media screen and (min-width: 60em) { + /* screen larger than 60em */ + body { margin: auto; } +} +@media screen and (max-width: 60em) { + /* screen less than 60em */ + #nav_hierarchy { display: none; } + #nav_interfaces { display: none; } + #nav_prerequisites { display: none; } + #nav_derived_interfaces { display: none; } + #nav_implementations { display: none; } + #nav_child_properties { display: none; } + #nav_style_properties { display: none; } + #nav_index { display: none; } + #nav_glossary { display: none; } + .gallery_image { display: none; } + .property_flags { display: none; } + .signal_flags { display: none; } + .parameter_annotations { display: none; } + .enum_member_annotations { display: none; } + .struct_member_annotations { display: none; } + .union_member_annotations { display: none; } + /* now that a column is hidden, optimize space */ + col.parameters_name { width: auto; } + col.parameters_description { width: auto; } + col.struct_members_name { width: auto; } + col.struct_members_description { width: auto; } + col.enum_members_name { width: auto; } + col.enum_members_description { width: auto; } + col.union_members_name { width: auto; } + col.union_members_description { width: auto; } + .listing_lines { display: none; } +} +@media print { + table.navigation { + visibility: collapse; + display: none; + } + div.titlepage table.navigation { + visibility: visible; + display: table; + background: #e2e2e2; + border: solid 1px #babdb6; + margin-top: 0; + margin-bottom: 0; + top: 0; + left: 0; + height: 3em; + } +} + diff --git a/doc/reference/html/up-insensitive.png b/doc/reference/html/up-insensitive.png Binary files differnew file mode 100644 index 0000000..f404986 --- /dev/null +++ b/doc/reference/html/up-insensitive.png diff --git a/doc/reference/html/up.png b/doc/reference/html/up.png Binary files differnew file mode 100644 index 0000000..80b4b37 --- /dev/null +++ b/doc/reference/html/up.png diff --git a/doc/reference/libtasn1-overrides.txt b/doc/reference/libtasn1-overrides.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/doc/reference/libtasn1-overrides.txt diff --git a/doc/reference/libtasn1-sections.txt b/doc/reference/libtasn1-sections.txt new file mode 100644 index 0000000..6708469 --- /dev/null +++ b/doc/reference/libtasn1-sections.txt @@ -0,0 +1,144 @@ +<SECTION> +<FILE>libtasn1</FILE> +ASN1_API +ASN1_VERSION +ASN1_SUCCESS +ASN1_FILE_NOT_FOUND +ASN1_ELEMENT_NOT_FOUND +ASN1_IDENTIFIER_NOT_FOUND +ASN1_DER_ERROR +ASN1_VALUE_NOT_FOUND +ASN1_GENERIC_ERROR +ASN1_VALUE_NOT_VALID +ASN1_TAG_ERROR +ASN1_TAG_IMPLICIT +ASN1_ERROR_TYPE_ANY +ASN1_SYNTAX_ERROR +ASN1_MEM_ERROR +ASN1_MEM_ALLOC_ERROR +ASN1_DER_OVERFLOW +ASN1_NAME_TOO_LONG +ASN1_ARRAY_ERROR +ASN1_ELEMENT_NOT_EMPTY +ASN1_PRINT_NAME +ASN1_PRINT_NAME_TYPE +ASN1_PRINT_NAME_TYPE_VALUE +ASN1_PRINT_ALL +ASN1_CLASS_UNIVERSAL +ASN1_CLASS_APPLICATION +ASN1_CLASS_CONTEXT_SPECIFIC +ASN1_CLASS_PRIVATE +ASN1_CLASS_STRUCTURED +ASN1_TAG_BOOLEAN +ASN1_TAG_INTEGER +ASN1_TAG_SEQUENCE +ASN1_TAG_SET +ASN1_TAG_OCTET_STRING +ASN1_TAG_BIT_STRING +ASN1_TAG_UTCTime +ASN1_TAG_GENERALIZEDTime +ASN1_TAG_OBJECT_ID +ASN1_TAG_ENUMERATED +ASN1_TAG_NULL +ASN1_TAG_GENERALSTRING +ASN1_TAG_NUMERIC_STRING +ASN1_TAG_IA5_STRING +ASN1_TAG_TELETEX_STRING +ASN1_TAG_PRINTABLE_STRING +ASN1_TAG_UNIVERSAL_STRING +ASN1_TAG_BMP_STRING +ASN1_TAG_UTF8_STRING +ASN1_TAG_VISIBLE_STRING +asn1_node_st +asn1_node +ASN1_MAX_NAME_SIZE +asn1_static_node +ASN1_ETYPE_INVALID +ASN1_ETYPE_CONSTANT +ASN1_ETYPE_IDENTIFIER +ASN1_ETYPE_INTEGER +ASN1_ETYPE_BOOLEAN +ASN1_ETYPE_SEQUENCE +ASN1_ETYPE_BIT_STRING +ASN1_ETYPE_OCTET_STRING +ASN1_ETYPE_TAG +ASN1_ETYPE_DEFAULT +ASN1_ETYPE_SIZE +ASN1_ETYPE_SEQUENCE_OF +ASN1_ETYPE_OBJECT_ID +ASN1_ETYPE_ANY +ASN1_ETYPE_SET +ASN1_ETYPE_SET_OF +ASN1_ETYPE_DEFINITIONS +ASN1_ETYPE_CHOICE +ASN1_ETYPE_IMPORTS +ASN1_ETYPE_NULL +ASN1_ETYPE_ENUMERATED +ASN1_ETYPE_GENERALSTRING +ASN1_ETYPE_NUMERIC_STRING +ASN1_ETYPE_IA5_STRING +ASN1_ETYPE_TELETEX_STRING +ASN1_ETYPE_PRINTABLE_STRING +ASN1_ETYPE_UNIVERSAL_STRING +ASN1_ETYPE_BMP_STRING +ASN1_ETYPE_UTF8_STRING +ASN1_ETYPE_VISIBLE_STRING +ASN1_ETYPE_UTC_TIME +ASN1_ETYPE_GENERALIZED_TIME +ASN1_DELETE_FLAG_ZEROIZE +ASN1_DECODE_FLAG_ALLOW_PADDING +asn1_data_node_st +ASN1_MAX_ERROR_DESCRIPTION_SIZE +asn1_parser2tree +asn1_parser2array +asn1_array2tree +asn1_print_structure +asn1_create_element +asn1_delete_structure +asn1_delete_structure2 +asn1_delete_element +asn1_write_value +asn1_read_value +asn1_read_value_type +asn1_read_node_value +asn1_number_of_elements +asn1_der_coding +asn1_der_decoding2 +asn1_der_decoding +asn1_der_decoding_element +asn1_der_decoding_startEnd +asn1_expand_any_defined_by +asn1_expand_octet_string +asn1_read_tag +asn1_find_structure_from_oid +asn1_check_version +asn1_strerror +asn1_perror +ASN1_MAX_TAG_SIZE +ASN1_MAX_LENGTH_SIZE +ASN1_MAX_TL_SIZE +asn1_get_length_der +asn1_get_length_ber +asn1_length_der +asn1_decode_simple_der +asn1_encode_simple_der +asn1_find_node +asn1_copy_node +asn1_dup_node +asn1_get_tag_der +asn1_octet_der +asn1_get_octet_der +asn1_bit_der +asn1_get_bit_der +asn1_retCode +node_asn_struct +node_asn +ASN1_TYPE +ASN1_TYPE_EMPTY +static_struct_asn +ASN1_ARRAY_TYPE +asn1_static_node_t +node_data_struct +ASN1_DATA_NODE +</SECTION> + diff --git a/doc/reference/libtasn1.types b/doc/reference/libtasn1.types new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/doc/reference/libtasn1.types diff --git a/doc/reference/tmpl/libtasn1-unused.sgml b/doc/reference/tmpl/libtasn1-unused.sgml new file mode 100644 index 0000000..5f0881f --- /dev/null +++ b/doc/reference/tmpl/libtasn1-unused.sgml @@ -0,0 +1,693 @@ +<!-- ##### MACRO ASN1_ARRAY_TYPE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_DATA_NODE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_DECODE_FLAG_ALLOW_PADDING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_DELETE_FLAG_ZEROIZE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_ANY ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_BIT_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_BMP_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_BOOLEAN ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_CHOICE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_CONSTANT ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_DEFAULT ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_DEFINITIONS ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_ENUMERATED ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_GENERALIZED_TIME ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_GENERALSTRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_IA5_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_IDENTIFIER ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_IMPORTS ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_INTEGER ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_INVALID ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_NULL ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_NUMERIC_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_OBJECT_ID ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_OCTET_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_PRINTABLE_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_SEQUENCE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_SEQUENCE_OF ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_SET ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_SET_OF ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_SIZE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_TAG ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_TELETEX_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_UNIVERSAL_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_UTC_TIME ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_UTF8_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_ETYPE_VISIBLE_STRING ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_MAX_ERROR_DESCRIPTION_SIZE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_MAX_LENGTH_SIZE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_MAX_TAG_SIZE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_MAX_TL_SIZE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_TYPE ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_TYPE_EMPTY ##### --> +<para> + +</para> + + +<!-- ##### FUNCTION asn1_array2tree ##### --> +<para> + +</para> + +@array: +@definitions: +@errorDescription: +@Returns: + +<!-- ##### FUNCTION asn1_bit_der ##### --> +<para> + +</para> + +@str: +@bit_len: +@der: +@der_len: + +<!-- ##### FUNCTION asn1_check_version ##### --> +<para> + +</para> + +@req_version: +@Returns: + +<!-- ##### FUNCTION asn1_copy_node ##### --> +<para> + +</para> + +@dst: +@dst_name: +@src: +@src_name: +@Returns: + +<!-- ##### FUNCTION asn1_create_element ##### --> +<para> + +</para> + +@definitions: +@source_name: +@element: +@Returns: + +<!-- ##### TYPEDEF asn1_data_node_st ##### --> +<para> + +</para> + + +<!-- ##### FUNCTION asn1_decode_simple_der ##### --> +<para> + +</para> + +@etype: +@der: +@der_len: +@str: +@str_len: +@Returns: + +<!-- ##### FUNCTION asn1_delete_element ##### --> +<para> + +</para> + +@structure: +@element_name: +@Returns: + +<!-- ##### FUNCTION asn1_delete_structure ##### --> +<para> + +</para> + +@structure: +@Returns: + +<!-- ##### FUNCTION asn1_delete_structure2 ##### --> +<para> + +</para> + +@structure: +@flags: +@Returns: + +<!-- ##### FUNCTION asn1_der_coding ##### --> +<para> + +</para> + +@element: +@name: +@ider: +@len: +@ErrorDescription: +@Returns: + +<!-- ##### FUNCTION asn1_der_decoding ##### --> +<para> + +</para> + +@element: +@ider: +@len: +@errorDescription: +@Returns: + +<!-- ##### FUNCTION asn1_der_decoding2 ##### --> +<para> + +</para> + +@element: +@ider: +@max_ider_len: +@flags: +@errorDescription: +@Returns: + +<!-- ##### FUNCTION asn1_der_decoding_element ##### --> +<para> + +</para> + +@structure: +@elementName: +@ider: +@len: +@errorDescription: +@Returns: + +<!-- ##### FUNCTION asn1_der_decoding_startEnd ##### --> +<para> + +</para> + +@element: +@ider: +@len: +@name_element: +@start: +@end: +@Returns: + +<!-- ##### FUNCTION asn1_dup_node ##### --> +<para> + +</para> + +@src: +@src_name: +@Returns: + +<!-- ##### FUNCTION asn1_encode_simple_der ##### --> +<para> + +</para> + +@etype: +@str: +@str_len: +@tl: +@tl_len: +@Returns: + +<!-- ##### FUNCTION asn1_expand_any_defined_by ##### --> +<para> + +</para> + +@definitions: +@element: +@Returns: + +<!-- ##### FUNCTION asn1_expand_octet_string ##### --> +<para> + +</para> + +@definitions: +@element: +@octetName: +@objectName: +@Returns: + +<!-- ##### FUNCTION asn1_find_node ##### --> +<para> + +</para> + +@pointer: +@name: +@Returns: + +<!-- ##### FUNCTION asn1_find_structure_from_oid ##### --> +<para> + +</para> + +@definitions: +@oidValue: +@Returns: + +<!-- ##### FUNCTION asn1_get_bit_der ##### --> +<para> + +</para> + +@der: +@der_len: +@ret_len: +@str: +@str_size: +@bit_len: +@Returns: + +<!-- ##### FUNCTION asn1_get_length_ber ##### --> +<para> + +</para> + +@ber: +@ber_len: +@len: +@Returns: + +<!-- ##### FUNCTION asn1_get_length_der ##### --> +<para> + +</para> + +@der: +@der_len: +@len: +@Returns: + +<!-- ##### FUNCTION asn1_get_octet_der ##### --> +<para> + +</para> + +@der: +@der_len: +@ret_len: +@str: +@str_size: +@str_len: +@Returns: + +<!-- ##### FUNCTION asn1_get_tag_der ##### --> +<para> + +</para> + +@der: +@der_len: +@cls: +@len: +@tag: +@Returns: + +<!-- ##### FUNCTION asn1_length_der ##### --> +<para> + +</para> + +@len: +@der: +@der_len: + +<!-- ##### FUNCTION asn1_number_of_elements ##### --> +<para> + +</para> + +@element: +@name: +@num: +@Returns: + +<!-- ##### FUNCTION asn1_octet_der ##### --> +<para> + +</para> + +@str: +@str_len: +@der: +@der_len: + +<!-- ##### FUNCTION asn1_parser2array ##### --> +<para> + +</para> + +@inputFileName: +@outputFileName: +@vectorName: +@error_desc: +@Returns: + +<!-- ##### FUNCTION asn1_parser2tree ##### --> +<para> + +</para> + +@file: +@definitions: +@error_desc: +@Returns: + +<!-- ##### FUNCTION asn1_perror ##### --> +<para> + +</para> + +@error: + +<!-- ##### FUNCTION asn1_print_structure ##### --> +<para> + +</para> + +@out: +@structure: +@name: +@mode: + +<!-- ##### FUNCTION asn1_read_node_value ##### --> +<para> + +</para> + +@node: +@data: +@Returns: + +<!-- ##### FUNCTION asn1_read_tag ##### --> +<para> + +</para> + +@root: +@name: +@tagValue: +@classValue: +@Returns: + +<!-- ##### FUNCTION asn1_read_value ##### --> +<para> + +</para> + +@root: +@name: +@ivalue: +@len: +@Returns: + +<!-- ##### FUNCTION asn1_read_value_type ##### --> +<para> + +</para> + +@root: +@name: +@ivalue: +@len: +@etype: +@Returns: + +<!-- ##### TYPEDEF asn1_retCode ##### --> +<para> + +</para> + + +<!-- ##### TYPEDEF asn1_static_node ##### --> +<para> + +</para> + + +<!-- ##### MACRO asn1_static_node_t ##### --> +<para> + +</para> + + +<!-- ##### FUNCTION asn1_strerror ##### --> +<para> + +</para> + +@error: +@Returns: + +<!-- ##### FUNCTION asn1_write_value ##### --> +<para> + +</para> + +@node_root: +@name: +@ivalue: +@len: +@Returns: + +<!-- ##### MACRO node_asn ##### --> +<para> + +</para> + + +<!-- ##### MACRO node_asn_struct ##### --> +<para> + +</para> + + +<!-- ##### MACRO node_data_struct ##### --> +<para> + +</para> + + +<!-- ##### MACRO static_struct_asn ##### --> +<para> + +</para> + + diff --git a/doc/reference/tmpl/libtasn1.sgml b/doc/reference/tmpl/libtasn1.sgml new file mode 100644 index 0000000..d8edbe4 --- /dev/null +++ b/doc/reference/tmpl/libtasn1.sgml @@ -0,0 +1,384 @@ +<!-- ##### SECTION Title ##### --> +libtasn1 + +<!-- ##### SECTION Short_Description ##### --> + + +<!-- ##### SECTION Long_Description ##### --> +<para> + +</para> + +<!-- ##### SECTION See_Also ##### --> +<para> + +</para> + +<!-- ##### SECTION Stability_Level ##### --> + + +<!-- ##### SECTION Image ##### --> + + +<!-- ##### MACRO ASN1_API ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_VERSION ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_SUCCESS ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_FILE_NOT_FOUND ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_ELEMENT_NOT_FOUND ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_IDENTIFIER_NOT_FOUND ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_DER_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_VALUE_NOT_FOUND ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_GENERIC_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_VALUE_NOT_VALID ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_IMPLICIT ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_ERROR_TYPE_ANY ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_SYNTAX_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_MEM_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_MEM_ALLOC_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_DER_OVERFLOW ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_NAME_TOO_LONG ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_ARRAY_ERROR ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_ELEMENT_NOT_EMPTY ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_PRINT_NAME ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_PRINT_NAME_TYPE ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_PRINT_NAME_TYPE_VALUE ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_PRINT_ALL ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_CLASS_UNIVERSAL ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_CLASS_APPLICATION ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_CLASS_CONTEXT_SPECIFIC ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_CLASS_PRIVATE ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_CLASS_STRUCTURED ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_BOOLEAN ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_INTEGER ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_SEQUENCE ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_SET ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_OCTET_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_BIT_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_UTCTime ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_GENERALIZEDTime ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_OBJECT_ID ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_ENUMERATED ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_NULL ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_GENERALSTRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_NUMERIC_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_IA5_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_TELETEX_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_PRINTABLE_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_UNIVERSAL_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_BMP_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_UTF8_STRING ##### --> +<para> + +</para> + + + +<!-- ##### MACRO ASN1_TAG_VISIBLE_STRING ##### --> +<para> + +</para> + + + +<!-- ##### TYPEDEF asn1_node_st ##### --> +<para> + +</para> + + +<!-- ##### TYPEDEF asn1_node ##### --> +<para> + +</para> + + +<!-- ##### MACRO ASN1_MAX_NAME_SIZE ##### --> +<para> + +</para> + + + diff --git a/doc/release-process.txt b/doc/release-process.txt deleted file mode 100644 index 161231e..0000000 --- a/doc/release-process.txt +++ /dev/null @@ -1,28 +0,0 @@ -Release steps: - -* Review changes compared to last release. - make review-diff - -* Make sure LT_* variables in configure.ac are updated properly. - -* Make sure NEWS file contains a good summary of changes. - -* Optionally check that everything builds. - make release-check - -* Replace 'unreleased' with 'released YYYY-MM-DD' in NEWS and commit - it with a commit log like 'Version 2.13.'. - -* Build tarball and update webpages. - make release - -* Email announcement, based on announce.txt. - -* Create a Savannah news blurb about the release: - https://savannah.gnu.org/news/?group=libtasn1 - -* Notify freecode.org. - -Post-release: - -* Update NEWS file for another release. diff --git a/doc/stamp-vti b/doc/stamp-vti new file mode 100644 index 0000000..b76228e --- /dev/null +++ b/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 4 April 2016 +@set UPDATED-MONTH April 2016 +@set EDITION 4.8 +@set VERSION 4.8 diff --git a/doc/stamp_docs b/doc/stamp_docs new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/doc/stamp_docs diff --git a/doc/texi/ASN1.c.texi b/doc/texi/ASN1.c.texi new file mode 100644 index 0000000..5b6b08a --- /dev/null +++ b/doc/texi/ASN1.c.texi @@ -0,0 +1,55 @@ +@subheading asn1_parser2tree +@anchor{asn1_parser2tree} +@deftypefun {int} {asn1_parser2tree} (const char * @var{file}, asn1_node * @var{definitions}, char * @var{error_desc}) +@var{file}: specify the path and the name of file that contains +ASN.1 declarations. + +@var{definitions}: return the pointer to the structure created from +"file" ASN.1 declarations. + +@var{error_desc}: return the error description or an empty +string if success. + +Function used to start the parse algorithm. Creates the structures +needed to manage the definitions included in @code{file} file. + +@strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every +identifier is known, @code{ASN1_ELEMENT_NOT_EMPTY} if @code{definitions} not +@code{NULL} , @code{ASN1_FILE_NOT_FOUND} if an error occured while +opening @code{file} , @code{ASN1_SYNTAX_ERROR} if the syntax is not +correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an +identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the +file there is an identifier whith more than @code{ASN1_MAX_NAME_SIZE} +characters. +@end deftypefun + +@subheading asn1_parser2array +@anchor{asn1_parser2array} +@deftypefun {int} {asn1_parser2array} (const char * @var{inputFileName}, const char * @var{outputFileName}, const char * @var{vectorName}, char * @var{error_desc}) +@var{inputFileName}: specify the path and the name of file that +contains ASN.1 declarations. + +@var{outputFileName}: specify the path and the name of file that will +contain the C vector definition. + +@var{vectorName}: specify the name of the C vector. + +@var{error_desc}: return the error description or an empty +string if success. + +Function that generates a C structure from an ASN1 file. Creates a +file containing a C vector to use to manage the definitions +included in @code{inputFileName} file. If @code{inputFileName} is +"/aa/bb/xx.yy" and @code{outputFileName} is @code{NULL} , the file created is +"/aa/bb/xx_asn1_tab.c". If @code{vectorName} is @code{NULL} the vector name +will be "xx_asn1_tab". + +@strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every +identifier is known, @code{ASN1_FILE_NOT_FOUND} if an error occured +while opening @code{inputFileName} , @code{ASN1_SYNTAX_ERROR} if the syntax is +not correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is +an identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the +file there is an identifier whith more than @code{ASN1_MAX_NAME_SIZE} +characters. +@end deftypefun + diff --git a/doc/texi/asn1_array2tree.texi b/doc/texi/asn1_array2tree.texi new file mode 100644 index 0000000..0974a0e --- /dev/null +++ b/doc/texi/asn1_array2tree.texi @@ -0,0 +1,20 @@ +@subheading asn1_array2tree +@anchor{asn1_array2tree} +@deftypefun {int} {asn1_array2tree} (const asn1_static_node * @var{array}, asn1_node * @var{definitions}, char * @var{errorDescription}) +@var{array}: specify the array that contains ASN.1 declarations + +@var{definitions}: return the pointer to the structure created by +*ARRAY ASN.1 declarations + +@var{errorDescription}: return the error description. + +Creates the structures needed to manage the ASN.1 definitions. + @code{array} is a vector created by @code{asn1_parser2array()} . + +@strong{Returns:} @code{ASN1_SUCCESS} if structure was created correctly, +@code{ASN1_ELEMENT_NOT_EMPTY} if * @code{definitions} not NULL, +@code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier +that is not defined (see @code{errorDescription} for more information), +@code{ASN1_ARRAY_ERROR} if the array pointed by @code{array} is wrong. +@end deftypefun + diff --git a/doc/texi/asn1_bit_der.texi b/doc/texi/asn1_bit_der.texi new file mode 100644 index 0000000..06cd67a --- /dev/null +++ b/doc/texi/asn1_bit_der.texi @@ -0,0 +1,24 @@ +@subheading asn1_bit_der +@anchor{asn1_bit_der} +@deftypefun {void} {asn1_bit_der} (const unsigned char * @var{str}, int @var{bit_len}, unsigned char * @var{der}, int * @var{der_len}) +@var{str}: BIT string. + +@var{bit_len}: number of meaningful bits in STR. + +@var{der}: string returned. + +@var{der_len}: number of meaningful bytes of DER +(der[0]..der[ans_len-1]). + +Creates a length-value DER encoding for the input data +as it would have been for a BIT STRING. +The DER encoded data will be copied in @code{der} . + +Note that the BIT STRING tag is not included in the output. + +This function does not return any value because it is expected +that @code{der_len} will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +@code{asn1_length_der()} . +@end deftypefun + diff --git a/doc/texi/asn1_check_version.texi b/doc/texi/asn1_check_version.texi new file mode 100644 index 0000000..b7495b6 --- /dev/null +++ b/doc/texi/asn1_check_version.texi @@ -0,0 +1,16 @@ +@subheading asn1_check_version +@anchor{asn1_check_version} +@deftypefun {const char *} {asn1_check_version} (const char * @var{req_version}) +@var{req_version}: Required version number, or @code{NULL} . + +Check that the version of the library is at minimum the +requested one and return the version string; return @code{NULL} if the +condition is not satisfied. If a @code{NULL} is passed to this function, +no check is done, but the version string is simply returned. + +See @code{ASN1_VERSION} for a suitable @code{req_version} string. + +@strong{Returns:} Version string of run-time library, or @code{NULL} if the +run-time library does not meet the required version number. +@end deftypefun + diff --git a/doc/texi/asn1_copy_node.texi b/doc/texi/asn1_copy_node.texi new file mode 100644 index 0000000..267d3fe --- /dev/null +++ b/doc/texi/asn1_copy_node.texi @@ -0,0 +1,17 @@ +@subheading asn1_copy_node +@anchor{asn1_copy_node} +@deftypefun {int} {asn1_copy_node} (asn1_node @var{dst}, const char * @var{dst_name}, asn1_node @var{src}, const char * @var{src_name}) +@var{dst}: Destination asn1 node. + +@var{dst_name}: Field name in destination node. + +@var{src}: Source asn1 node. + +@var{src_name}: Field name in source node. + +Create a deep copy of a asn1_node variable. That +function requires @code{dst} to be expanded using @code{asn1_create_element()} . + +@strong{Returns:} Return @code{ASN1_SUCCESS} on success. +@end deftypefun + diff --git a/doc/texi/asn1_create_element.texi b/doc/texi/asn1_create_element.texi new file mode 100644 index 0000000..f6e6c09 --- /dev/null +++ b/doc/texi/asn1_create_element.texi @@ -0,0 +1,19 @@ +@subheading asn1_create_element +@anchor{asn1_create_element} +@deftypefun {int} {asn1_create_element} (asn1_node @var{definitions}, const char * @var{source_name}, asn1_node * @var{element}) +@var{definitions}: pointer to the structure returned by "parser_asn1" function + +@var{source_name}: the name of the type of the new structure (must be +inside p_structure). + +@var{element}: pointer to the structure created. + +Creates a structure of type @code{source_name} . Example using +"pkix.asn": + +rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); + +@strong{Returns:} @code{ASN1_SUCCESS} if creation OK, @code{ASN1_ELEMENT_NOT_FOUND} if + @code{source_name} is not known. +@end deftypefun + diff --git a/doc/texi/asn1_decode_simple_ber.texi b/doc/texi/asn1_decode_simple_ber.texi new file mode 100644 index 0000000..c992986 --- /dev/null +++ b/doc/texi/asn1_decode_simple_ber.texi @@ -0,0 +1,22 @@ +@subheading asn1_decode_simple_ber +@anchor{asn1_decode_simple_ber} +@deftypefun {int} {asn1_decode_simple_ber} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, unsigned char ** @var{str}, unsigned int * @var{str_len}, unsigned int * @var{ber_len}) +@var{etype}: The type of the string to be encoded (ASN1_ETYPE_) + +@var{der}: the encoded string + +@var{_der_len}: the bytes of the encoded string + +@var{str}: a pointer to the data + +@var{str_len}: the length of the data + +@var{ber_len}: the total length occupied by BER (may be @code{NULL} ) + +Decodes a BER encoded type. The output is an allocated value +of the data. This decodes BER STRINGS only. Other types are +decoded as DER. + +@strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. +@end deftypefun + diff --git a/doc/texi/asn1_decode_simple_der.texi b/doc/texi/asn1_decode_simple_der.texi new file mode 100644 index 0000000..5673bdc --- /dev/null +++ b/doc/texi/asn1_decode_simple_der.texi @@ -0,0 +1,19 @@ +@subheading asn1_decode_simple_der +@anchor{asn1_decode_simple_der} +@deftypefun {int} {asn1_decode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, const unsigned char ** @var{str}, unsigned int * @var{str_len}) +@var{etype}: The type of the string to be encoded (ASN1_ETYPE_) + +@var{der}: the encoded string + +@var{_der_len}: the bytes of the encoded string + +@var{str}: a pointer to the data + +@var{str_len}: the length of the data + +Decodes a simple DER encoded type (e.g. a string, which is not constructed). +The output is a pointer inside the @code{der} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. +@end deftypefun + diff --git a/doc/texi/asn1_delete_element.texi b/doc/texi/asn1_delete_element.texi new file mode 100644 index 0000000..93f713f --- /dev/null +++ b/doc/texi/asn1_delete_element.texi @@ -0,0 +1,14 @@ +@subheading asn1_delete_element +@anchor{asn1_delete_element} +@deftypefun {int} {asn1_delete_element} (asn1_node @var{structure}, const char * @var{element_name}) +@var{structure}: pointer to the structure that contains the element you +want to delete. + +@var{element_name}: element's name you want to delete. + +Deletes the element named * @code{element_name} inside * @code{structure} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if +the @code{element_name} was not found. +@end deftypefun + diff --git a/doc/texi/asn1_delete_structure.texi b/doc/texi/asn1_delete_structure.texi new file mode 100644 index 0000000..23421c3 --- /dev/null +++ b/doc/texi/asn1_delete_structure.texi @@ -0,0 +1,12 @@ +@subheading asn1_delete_structure +@anchor{asn1_delete_structure} +@deftypefun {int} {asn1_delete_structure} (asn1_node * @var{structure}) +@var{structure}: pointer to the structure that you want to delete. + +Deletes the structure * @code{structure} . At the end, * @code{structure} is set +to NULL. + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if +* @code{structure} was NULL. +@end deftypefun + diff --git a/doc/texi/asn1_delete_structure2.texi b/doc/texi/asn1_delete_structure2.texi new file mode 100644 index 0000000..6bc85aa --- /dev/null +++ b/doc/texi/asn1_delete_structure2.texi @@ -0,0 +1,14 @@ +@subheading asn1_delete_structure2 +@anchor{asn1_delete_structure2} +@deftypefun {int} {asn1_delete_structure2} (asn1_node * @var{structure}, unsigned int @var{flags}) +@var{structure}: pointer to the structure that you want to delete. + +@var{flags}: additional flags (see @code{ASN1_DELETE_FLAG} ) + +Deletes the structure * @code{structure} . At the end, * @code{structure} is set +to NULL. + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if +* @code{structure} was NULL. +@end deftypefun + diff --git a/doc/texi/asn1_der_coding.texi b/doc/texi/asn1_der_coding.texi new file mode 100644 index 0000000..2c8f9ff --- /dev/null +++ b/doc/texi/asn1_der_coding.texi @@ -0,0 +1,26 @@ +@subheading asn1_der_coding +@anchor{asn1_der_coding} +@deftypefun {int} {asn1_der_coding} (asn1_node @var{element}, const char * @var{name}, void * @var{ider}, int * @var{len}, char * @var{ErrorDescription}) +@var{element}: pointer to an ASN1 element + +@var{name}: the name of the structure you want to encode (it must be +inside *POINTER). + +@var{ider}: vector that will contain the DER encoding. DER must be a +pointer to memory cells already allocated. + +@var{len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1], Initialy +holds the sizeof of der vector. + +@var{ErrorDescription}: return the error description or an empty +string if success. + +Creates the DER encoding for the NAME structure (inside *POINTER +structure). + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there +is an element without a value, @code{ASN1_MEM_ERROR} if the @code{ider} vector isn't big enough and in this case @code{len} will contain the +length needed. +@end deftypefun + diff --git a/doc/texi/asn1_der_decoding.texi b/doc/texi/asn1_der_decoding.texi new file mode 100644 index 0000000..ff3574d --- /dev/null +++ b/doc/texi/asn1_der_decoding.texi @@ -0,0 +1,25 @@ +@subheading asn1_der_decoding +@anchor{asn1_der_decoding} +@deftypefun {int} {asn1_der_decoding} (asn1_node * @var{element}, const void * @var{ider}, int @var{ider_len}, char * @var{errorDescription}) +@var{element}: pointer to an ASN1 structure. + +@var{ider}: vector that contains the DER encoding. + +@var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1]. + +@var{errorDescription}: null-terminated string contains details when an +error occurred. + +Fill the structure * @code{element} with values of a DER encoding +string. The structure must just be created with function +@code{asn1_create_element()} . + +Note that the * @code{element} variable is provided as a pointer for +historical reasons. + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or +@code{ASN1_DER_ERROR} if the der encoding doesn't match the structure +name (* @code{ELEMENT} deleted). +@end deftypefun + diff --git a/doc/texi/asn1_der_decoding2.texi b/doc/texi/asn1_der_decoding2.texi new file mode 100644 index 0000000..4e796b3 --- /dev/null +++ b/doc/texi/asn1_der_decoding2.texi @@ -0,0 +1,32 @@ +@subheading asn1_der_decoding2 +@anchor{asn1_der_decoding2} +@deftypefun {int} {asn1_der_decoding2} (asn1_node * @var{element}, const void * @var{ider}, int * @var{max_ider_len}, unsigned int @var{flags}, char * @var{errorDescription}) +@var{element}: pointer to an ASN1 structure. + +@var{ider}: vector that contains the DER encoding. + +@var{max_ider_len}: pointer to an integer giving the information about the +maximal number of bytes occupied by * @code{ider} . The real size of the DER +encoding is returned through this pointer. + +@var{flags}: flags controlling the behaviour of the function. + +@var{errorDescription}: null-terminated string contains details when an +error occurred. + +Fill the structure * @code{element} with values of a DER encoding string. The +structure must just be created with function @code{asn1_create_element()} . + +If @code{ASN1_DECODE_FLAG_ALLOW_PADDING} flag is set then the function will ignore +padding after the decoded DER data. Upon a successful return the value of +* @code{max_ider_len} will be set to the number of bytes decoded. + +If @code{ASN1_DECODE_FLAG_STRICT_DER} flag is set then the function will +not decode any BER-encoded elements. + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or +@code{ASN1_DER_ERROR} if the der encoding doesn't match the structure +name (* @code{ELEMENT} deleted). +@end deftypefun + diff --git a/doc/texi/asn1_der_decoding_element.texi b/doc/texi/asn1_der_decoding_element.texi new file mode 100644 index 0000000..ec34abe --- /dev/null +++ b/doc/texi/asn1_der_decoding_element.texi @@ -0,0 +1,30 @@ +@subheading asn1_der_decoding_element +@anchor{asn1_der_decoding_element} +@deftypefun {int} {asn1_der_decoding_element} (asn1_node * @var{structure}, const char * @var{elementName}, const void * @var{ider}, int @var{len}, char * @var{errorDescription}) +@var{structure}: pointer to an ASN1 structure + +@var{elementName}: name of the element to fill + +@var{ider}: vector that contains the DER encoding of the whole structure. + +@var{len}: number of bytes of *der: der[0]..der[len-1] + +@var{errorDescription}: null-terminated string contains details when an +error occurred. + +Fill the element named @code{ELEMENTNAME} with values of a DER encoding +string. The structure must just be created with function +@code{asn1_create_element()} . The DER vector must contain the encoding +string of the whole @code{STRUCTURE} . If an error occurs during the +decoding procedure, the * @code{STRUCTURE} is deleted and set equal to +@code{NULL} . + +This function is deprecated and may just be an alias to asn1_der_decoding +in future versions. Use @code{asn1_der_decoding()} instead. + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if ELEMENT is @code{NULL} or @code{elementName} == NULL, and +@code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't +match the structure @code{structure} (*ELEMENT deleted). +@end deftypefun + diff --git a/doc/texi/asn1_der_decoding_startEnd.texi b/doc/texi/asn1_der_decoding_startEnd.texi new file mode 100644 index 0000000..6bc5cf9 --- /dev/null +++ b/doc/texi/asn1_der_decoding_startEnd.texi @@ -0,0 +1,35 @@ +@subheading asn1_der_decoding_startEnd +@anchor{asn1_der_decoding_startEnd} +@deftypefun {int} {asn1_der_decoding_startEnd} (asn1_node @var{element}, const void * @var{ider}, int @var{ider_len}, const char * @var{name_element}, int * @var{start}, int * @var{end}) +@var{element}: pointer to an ASN1 element + +@var{ider}: vector that contains the DER encoding. + +@var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1] + +@var{name_element}: an element of NAME structure. + +@var{start}: the position of the first byte of NAME_ELEMENT decoding +( @code{ider} [*start]) + +@var{end}: the position of the last byte of NAME_ELEMENT decoding +( @code{ider} [*end]) + +Find the start and end point of an element in a DER encoding +string. I mean that if you have a der encoding and you have already +used the function @code{asn1_der_decoding()} to fill a structure, it may +happen that you want to find the piece of string concerning an +element of the structure. + +One example is the sequence "tbsCertificate" inside an X509 +certificate. + +Note that since libtasn1 3.7 the @code{ider} and @code{ider_len} parameters +can be omitted, if the element is already decoded using @code{asn1_der_decoding()} . + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if ELEMENT is @code{asn1_node} EMPTY or @code{name_element} is not a valid +element, @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding +doesn't match the structure ELEMENT. +@end deftypefun + diff --git a/doc/texi/asn1_dup_node.texi b/doc/texi/asn1_dup_node.texi new file mode 100644 index 0000000..b2f52b2 --- /dev/null +++ b/doc/texi/asn1_dup_node.texi @@ -0,0 +1,13 @@ +@subheading asn1_dup_node +@anchor{asn1_dup_node} +@deftypefun {asn1_node} {asn1_dup_node} (asn1_node @var{src}, const char * @var{src_name}) +@var{src}: Source asn1 node. + +@var{src_name}: Field name in source node. + +Create a deep copy of a asn1_node variable. This function +will return an exact copy of the provided structure. + +@strong{Returns:} Return @code{NULL} on failure. +@end deftypefun + diff --git a/doc/texi/asn1_encode_simple_der.texi b/doc/texi/asn1_encode_simple_der.texi new file mode 100644 index 0000000..8f4a2c0 --- /dev/null +++ b/doc/texi/asn1_encode_simple_der.texi @@ -0,0 +1,23 @@ +@subheading asn1_encode_simple_der +@anchor{asn1_encode_simple_der} +@deftypefun {int} {asn1_encode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{str}, unsigned int @var{str_len}, unsigned char * @var{tl}, unsigned int * @var{tl_len}) +@var{etype}: The type of the string to be encoded (ASN1_ETYPE_) + +@var{str}: the string data. + +@var{str_len}: the string length + +@var{tl}: the encoded tag and length + +@var{tl_len}: the bytes of the @code{tl} field + +Creates the DER encoding for various simple ASN.1 types like strings etc. +It stores the tag and length in @code{tl} , which should have space for at least +@code{ASN1_MAX_TL_SIZE} bytes. Initially @code{tl_len} should contain the size of @code{tl} . + +The complete DER encoding should consist of the value in @code{tl} appended +with the provided @code{str} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. +@end deftypefun + diff --git a/doc/texi/asn1_expand_any_defined_by.texi b/doc/texi/asn1_expand_any_defined_by.texi new file mode 100644 index 0000000..c17da6b --- /dev/null +++ b/doc/texi/asn1_expand_any_defined_by.texi @@ -0,0 +1,19 @@ +@subheading asn1_expand_any_defined_by +@anchor{asn1_expand_any_defined_by} +@deftypefun {int} {asn1_expand_any_defined_by} (asn1_node @var{definitions}, asn1_node * @var{element}) +@var{definitions}: ASN1 definitions + +@var{element}: pointer to an ASN1 structure + +Expands every "ANY DEFINED BY" element of a structure created from +a DER decoding process (asn1_der_decoding function). The element +ANY must be defined by an OBJECT IDENTIFIER. The type used to +expand the element ANY is the first one following the definition of +the actual value of the OBJECT IDENTIFIER. + +@strong{Returns:} @code{ASN1_SUCCESS} if Substitution OK, @code{ASN1_ERROR_TYPE_ANY} if +some "ANY DEFINED BY" element couldn't be expanded due to a +problem in OBJECT_ID -> TYPE association, or other error codes +depending on DER decoding. +@end deftypefun + diff --git a/doc/texi/asn1_expand_octet_string.texi b/doc/texi/asn1_expand_octet_string.texi new file mode 100644 index 0000000..a459e32 --- /dev/null +++ b/doc/texi/asn1_expand_octet_string.texi @@ -0,0 +1,23 @@ +@subheading asn1_expand_octet_string +@anchor{asn1_expand_octet_string} +@deftypefun {int} {asn1_expand_octet_string} (asn1_node @var{definitions}, asn1_node * @var{element}, const char * @var{octetName}, const char * @var{objectName}) +@var{definitions}: ASN1 definitions + +@var{element}: pointer to an ASN1 structure + +@var{octetName}: name of the OCTECT STRING field to expand. + +@var{objectName}: name of the OBJECT IDENTIFIER field to use to define +the type for expansion. + +Expands an "OCTET STRING" element of a structure created from a DER +decoding process (the @code{asn1_der_decoding()} function). The type used +for expansion is the first one following the definition of the +actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. + +@strong{Returns:} @code{ASN1_SUCCESS} if substitution OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{objectName} or @code{octetName} are not correct, +@code{ASN1_VALUE_NOT_VALID} if it wasn't possible to find the type to +use for expansion, or other errors depending on DER decoding. +@end deftypefun + diff --git a/doc/texi/asn1_find_node.texi b/doc/texi/asn1_find_node.texi new file mode 100644 index 0000000..e5be7c4 --- /dev/null +++ b/doc/texi/asn1_find_node.texi @@ -0,0 +1,15 @@ +@subheading asn1_find_node +@anchor{asn1_find_node} +@deftypefun {asn1_node} {asn1_find_node} (asn1_node @var{pointer}, const char * @var{name}) +@var{pointer}: NODE_ASN element pointer. + +@var{name}: null terminated string with the element's name to find. + +Searches for an element called @code{name} starting from @code{pointer} . The +name is composed by differents identifiers separated by dots. When +* @code{pointer} has a name, the first identifier must be the name of +* @code{pointer} , otherwise it must be the name of one child of * @code{pointer} . + +@strong{Returns:} the search result, or @code{NULL} if not found. +@end deftypefun + diff --git a/doc/texi/asn1_find_structure_from_oid.texi b/doc/texi/asn1_find_structure_from_oid.texi new file mode 100644 index 0000000..18e7e9b --- /dev/null +++ b/doc/texi/asn1_find_structure_from_oid.texi @@ -0,0 +1,14 @@ +@subheading asn1_find_structure_from_oid +@anchor{asn1_find_structure_from_oid} +@deftypefun {const char *} {asn1_find_structure_from_oid} (asn1_node @var{definitions}, const char * @var{oidValue}) +@var{definitions}: ASN1 definitions + +@var{oidValue}: value of the OID to search (e.g. "1.2.3.4"). + +Search the structure that is defined just after an OID definition. + +@strong{Returns:} @code{NULL} when @code{oidValue} not found, otherwise the pointer to a +constant string that contains the element name defined just after +the OID. +@end deftypefun + diff --git a/doc/texi/asn1_get_bit_der.texi b/doc/texi/asn1_get_bit_der.texi new file mode 100644 index 0000000..5cec631 --- /dev/null +++ b/doc/texi/asn1_get_bit_der.texi @@ -0,0 +1,20 @@ +@subheading asn1_get_bit_der +@anchor{asn1_get_bit_der} +@deftypefun {int} {asn1_get_bit_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{bit_len}) +@var{der}: DER data to decode containing the BIT SEQUENCE. + +@var{der_len}: Length of DER data to decode. + +@var{ret_len}: Output variable containing the length of the DER data. + +@var{str}: Pre-allocated output buffer to put decoded BIT SEQUENCE in. + +@var{str_size}: Length of pre-allocated output buffer. + +@var{bit_len}: Output variable containing the size of the BIT SEQUENCE. + +Extract a BIT SEQUENCE from DER data. + +@strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + diff --git a/doc/texi/asn1_get_length_ber.texi b/doc/texi/asn1_get_length_ber.texi new file mode 100644 index 0000000..375d477 --- /dev/null +++ b/doc/texi/asn1_get_length_ber.texi @@ -0,0 +1,19 @@ +@subheading asn1_get_length_ber +@anchor{asn1_get_length_ber} +@deftypefun {long} {asn1_get_length_ber} (const unsigned char * @var{ber}, int @var{ber_len}, int * @var{len}) +@var{ber}: BER data to decode. + +@var{ber_len}: Length of BER data to decode. + +@var{len}: Output variable containing the length of the BER length field. + +Extract a length field from BER data. The difference to +@code{asn1_get_length_der()} is that this function will return a length +even if the value has indefinite encoding. + +@strong{Returns:} Return the decoded length value, or negative value when +the value was too big. + +@strong{Since:} 2.0 +@end deftypefun + diff --git a/doc/texi/asn1_get_length_der.texi b/doc/texi/asn1_get_length_der.texi new file mode 100644 index 0000000..d112300 --- /dev/null +++ b/doc/texi/asn1_get_length_der.texi @@ -0,0 +1,16 @@ +@subheading asn1_get_length_der +@anchor{asn1_get_length_der} +@deftypefun {long} {asn1_get_length_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{len}) +@var{der}: DER data to decode. + +@var{der_len}: Length of DER data to decode. + +@var{len}: Output variable containing the length of the DER length field. + +Extract a length field from DER data. + +@strong{Returns:} Return the decoded length value, or -1 on indefinite +length, or -2 when the value was too big to fit in a int, or -4 +when the decoded length value plus @code{len} would exceed @code{der_len} . +@end deftypefun + diff --git a/doc/texi/asn1_get_object_id_der.texi b/doc/texi/asn1_get_object_id_der.texi new file mode 100644 index 0000000..a9ef147 --- /dev/null +++ b/doc/texi/asn1_get_object_id_der.texi @@ -0,0 +1,18 @@ +@subheading asn1_get_object_id_der +@anchor{asn1_get_object_id_der} +@deftypefun {int} {asn1_get_object_id_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, char * @var{str}, int @var{str_size}) +@var{der}: DER data to decode containing the OBJECT IDENTIFIER + +@var{der_len}: Length of DER data to decode. + +@var{ret_len}: Output variable containing the length of the DER data. + +@var{str}: Pre-allocated output buffer to put the textual object id in. + +@var{str_size}: Length of pre-allocated output buffer. + +Converts a DER encoded object identifier to its textual form. + +@strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + diff --git a/doc/texi/asn1_get_octet_der.texi b/doc/texi/asn1_get_octet_der.texi new file mode 100644 index 0000000..14a8422 --- /dev/null +++ b/doc/texi/asn1_get_octet_der.texi @@ -0,0 +1,20 @@ +@subheading asn1_get_octet_der +@anchor{asn1_get_octet_der} +@deftypefun {int} {asn1_get_octet_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{str_len}) +@var{der}: DER data to decode containing the OCTET SEQUENCE. + +@var{der_len}: Length of DER data to decode. + +@var{ret_len}: Output variable containing the length of the DER data. + +@var{str}: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. + +@var{str_size}: Length of pre-allocated output buffer. + +@var{str_len}: Output variable containing the length of the OCTET SEQUENCE. + +Extract an OCTET SEQUENCE from DER data. + +@strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + diff --git a/doc/texi/asn1_get_tag_der.texi b/doc/texi/asn1_get_tag_der.texi new file mode 100644 index 0000000..a63ad3b --- /dev/null +++ b/doc/texi/asn1_get_tag_der.texi @@ -0,0 +1,18 @@ +@subheading asn1_get_tag_der +@anchor{asn1_get_tag_der} +@deftypefun {int} {asn1_get_tag_der} (const unsigned char * @var{der}, int @var{der_len}, unsigned char * @var{cls}, int * @var{len}, unsigned long * @var{tag}) +@var{der}: DER data to decode. + +@var{der_len}: Length of DER data to decode. + +@var{cls}: Output variable containing decoded class. + +@var{len}: Output variable containing the length of the DER TAG data. + +@var{tag}: Output variable containing the decoded tag. + +Decode the class and TAG from DER code. + +@strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + diff --git a/doc/texi/asn1_length_der.texi b/doc/texi/asn1_length_der.texi new file mode 100644 index 0000000..72efb8b --- /dev/null +++ b/doc/texi/asn1_length_der.texi @@ -0,0 +1,16 @@ +@subheading asn1_length_der +@anchor{asn1_length_der} +@deftypefun {void} {asn1_length_der} (unsigned long int @var{len}, unsigned char * @var{der}, int * @var{der_len}) +@var{len}: value to convert. + +@var{der}: buffer to hold the returned encoding (may be @code{NULL} ). + +@var{der_len}: number of meaningful bytes of ANS (der[0]..der[der_len-1]). + +Creates the DER encoding of the provided length value. +The @code{der} buffer must have enough room for the output. The maximum +length this function will encode is @code{ASN1_MAX_LENGTH_SIZE} . + +To know the size of the DER encoding use a @code{NULL} value for @code{der} . +@end deftypefun + diff --git a/doc/texi/asn1_number_of_elements.texi b/doc/texi/asn1_number_of_elements.texi new file mode 100644 index 0000000..f4a1ae8 --- /dev/null +++ b/doc/texi/asn1_number_of_elements.texi @@ -0,0 +1,16 @@ +@subheading asn1_number_of_elements +@anchor{asn1_number_of_elements} +@deftypefun {int} {asn1_number_of_elements} (asn1_node @var{element}, const char * @var{name}, int * @var{num}) +@var{element}: pointer to the root of an ASN1 structure. + +@var{name}: the name of a sub-structure of ROOT. + +@var{num}: pointer to an integer where the result will be stored + +Counts the number of elements of a sub-structure called NAME with +names equal to "?1","?2", ... + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if + @code{name} is not known, @code{ASN1_GENERIC_ERROR} if pointer @code{num} is @code{NULL} . +@end deftypefun + diff --git a/doc/texi/asn1_octet_der.texi b/doc/texi/asn1_octet_der.texi new file mode 100644 index 0000000..db28885 --- /dev/null +++ b/doc/texi/asn1_octet_der.texi @@ -0,0 +1,22 @@ +@subheading asn1_octet_der +@anchor{asn1_octet_der} +@deftypefun {void} {asn1_octet_der} (const unsigned char * @var{str}, int @var{str_len}, unsigned char * @var{der}, int * @var{der_len}) +@var{str}: the input data. + +@var{str_len}: STR length (str[0]..str[*str_len-1]). + +@var{der}: encoded string returned. + +@var{der_len}: number of meaningful bytes of DER (der[0]..der[der_len-1]). + +Creates a length-value DER encoding for the input data. +The DER encoding of the input data will be placed in the @code{der} variable. + +Note that the OCTET STRING tag is not included in the output. + +This function does not return any value because it is expected +that @code{der_len} will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +@code{asn1_length_der()} . +@end deftypefun + diff --git a/doc/texi/asn1_parser2array.texi b/doc/texi/asn1_parser2array.texi new file mode 100644 index 0000000..d345e73 --- /dev/null +++ b/doc/texi/asn1_parser2array.texi @@ -0,0 +1,30 @@ +@subheading asn1_parser2array +@anchor{asn1_parser2array} +@deftypefun {int} {asn1_parser2array} (const char * @var{inputFileName}, const char * @var{outputFileName}, const char * @var{vectorName}, char * @var{error_desc}) +@var{inputFileName}: specify the path and the name of file that +contains ASN.1 declarations. + +@var{outputFileName}: specify the path and the name of file that will +contain the C vector definition. + +@var{vectorName}: specify the name of the C vector. + +@var{error_desc}: return the error description or an empty +string if success. + +Function that generates a C structure from an ASN1 file. Creates a +file containing a C vector to use to manage the definitions +included in @code{inputFileName} file. If @code{inputFileName} is +"/aa/bb/xx.yy" and @code{outputFileName} is @code{NULL} , the file created is +"/aa/bb/xx_asn1_tab.c". If @code{vectorName} is @code{NULL} the vector name +will be "xx_asn1_tab". + +@strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every +identifier is known, @code{ASN1_FILE_NOT_FOUND} if an error occured +while opening @code{inputFileName} , @code{ASN1_SYNTAX_ERROR} if the syntax is +not correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is +an identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the +file there is an identifier whith more than @code{ASN1_MAX_NAME_SIZE} +characters. +@end deftypefun + diff --git a/doc/texi/asn1_parser2tree.texi b/doc/texi/asn1_parser2tree.texi new file mode 100644 index 0000000..c545fe6 --- /dev/null +++ b/doc/texi/asn1_parser2tree.texi @@ -0,0 +1,25 @@ +@subheading asn1_parser2tree +@anchor{asn1_parser2tree} +@deftypefun {int} {asn1_parser2tree} (const char * @var{file}, asn1_node * @var{definitions}, char * @var{error_desc}) +@var{file}: specify the path and the name of file that contains +ASN.1 declarations. + +@var{definitions}: return the pointer to the structure created from +"file" ASN.1 declarations. + +@var{error_desc}: return the error description or an empty +string if success. + +Function used to start the parse algorithm. Creates the structures +needed to manage the definitions included in @code{file} file. + +@strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every +identifier is known, @code{ASN1_ELEMENT_NOT_EMPTY} if @code{definitions} not +@code{NULL} , @code{ASN1_FILE_NOT_FOUND} if an error occured while +opening @code{file} , @code{ASN1_SYNTAX_ERROR} if the syntax is not +correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an +identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the +file there is an identifier whith more than @code{ASN1_MAX_NAME_SIZE} +characters. +@end deftypefun + diff --git a/doc/texi/asn1_perror.texi b/doc/texi/asn1_perror.texi new file mode 100644 index 0000000..c444e13 --- /dev/null +++ b/doc/texi/asn1_perror.texi @@ -0,0 +1,12 @@ +@subheading asn1_perror +@anchor{asn1_perror} +@deftypefun {void} {asn1_perror} (int @var{error}) +@var{error}: is an error returned by a libtasn1 function. + +Prints a string to stderr with a description of an error. This +function is like @code{perror()} . The only difference is that it accepts +an error returned by a libtasn1 function. + +@strong{Since:} 1.6 +@end deftypefun + diff --git a/doc/texi/asn1_print_structure.texi b/doc/texi/asn1_print_structure.texi new file mode 100644 index 0000000..9072bfb --- /dev/null +++ b/doc/texi/asn1_print_structure.texi @@ -0,0 +1,17 @@ +@subheading asn1_print_structure +@anchor{asn1_print_structure} +@deftypefun {void} {asn1_print_structure} (FILE * @var{out}, asn1_node @var{structure}, const char * @var{name}, int @var{mode}) +@var{out}: pointer to the output file (e.g. stdout). + +@var{structure}: pointer to the structure that you want to visit. + +@var{name}: an element of the structure + +@var{mode}: specify how much of the structure to print, can be +@code{ASN1_PRINT_NAME} , @code{ASN1_PRINT_NAME_TYPE} , +@code{ASN1_PRINT_NAME_TYPE_VALUE} , or @code{ASN1_PRINT_ALL} . + +Prints on the @code{out} file descriptor the structure's tree starting +from the @code{name} element inside the structure @code{structure} . +@end deftypefun + diff --git a/doc/texi/asn1_read_node_value.texi b/doc/texi/asn1_read_node_value.texi new file mode 100644 index 0000000..fd74bbc --- /dev/null +++ b/doc/texi/asn1_read_node_value.texi @@ -0,0 +1,13 @@ +@subheading asn1_read_node_value +@anchor{asn1_read_node_value} +@deftypefun {int} {asn1_read_node_value} (asn1_node @var{node}, asn1_data_node_st * @var{data}) +@var{node}: pointer to a node. + +@var{data}: a point to a asn1_data_node_st + +Returns the value a data node inside a asn1_node structure. +The data returned should be handled as constant values. + +@strong{Returns:} @code{ASN1_SUCCESS} if the node exists. +@end deftypefun + diff --git a/doc/texi/asn1_read_tag.texi b/doc/texi/asn1_read_tag.texi new file mode 100644 index 0000000..1226e40 --- /dev/null +++ b/doc/texi/asn1_read_tag.texi @@ -0,0 +1,20 @@ +@subheading asn1_read_tag +@anchor{asn1_read_tag} +@deftypefun {int} {asn1_read_tag} (asn1_node @var{root}, const char * @var{name}, int * @var{tagValue}, int * @var{classValue}) +@var{root}: pointer to a structure + +@var{name}: the name of the element inside a structure. + +@var{tagValue}: variable that will contain the TAG value. + +@var{classValue}: variable that will specify the TAG type. + +Returns the TAG and the CLASS of one element inside a structure. +CLASS can have one of these constants: @code{ASN1_CLASS_APPLICATION} , +@code{ASN1_CLASS_UNIVERSAL} , @code{ASN1_CLASS_PRIVATE} or +@code{ASN1_CLASS_CONTEXT_SPECIFIC} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if + @code{name} is not a valid element. +@end deftypefun + diff --git a/doc/texi/asn1_read_value.texi b/doc/texi/asn1_read_value.texi new file mode 100644 index 0000000..b6bb18c --- /dev/null +++ b/doc/texi/asn1_read_value.texi @@ -0,0 +1,70 @@ +@subheading asn1_read_value +@anchor{asn1_read_value} +@deftypefun {int} {asn1_read_value} (asn1_node @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}) +@var{root}: pointer to a structure. + +@var{name}: the name of the element inside a structure that you want to read. + +@var{ivalue}: vector that will contain the element's content, must be a +pointer to memory cells already allocated (may be @code{NULL} ). + +@var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy +holds the sizeof value. + +Returns the value of one element inside a structure. +If an element is OPTIONAL and this returns +@code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the @code{root} provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. + +Note that there can be valid values with length zero. In these case +this function will succeed and @code{len} will be zero. + +@strong{INTEGER:} VALUE will contain a two's complement form integer. + +integer=-1 -> value[0]=0xFF , len=1. +integer=1 -> value[0]=0x01 , len=1. + +@strong{ENUMERATED:} As INTEGER (but only with not negative numbers). + +@strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. + +OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). + +LEN = strlen(VALUE)+1 + +@strong{UTCTime:} VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". +LEN=strlen(VALUE)+1. + +@strong{GeneralizedTime:} VALUE will be a null terminated string in the +same format used to set the value. + +OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. + +@strong{GeneralString:} VALUE will contain the generalstring and LEN will +be the number of octets. + +BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. + +@strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the +alternative selected. + +@strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. + +@strong{Returns:} @code{ASN1_SUCCESS} if value is returned, +@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, +@code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element +selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough +to store the result, and in this case @code{len} will contain the number of +bytes needed. +@end deftypefun + diff --git a/doc/texi/asn1_read_value_type.texi b/doc/texi/asn1_read_value_type.texi new file mode 100644 index 0000000..8f50f4e --- /dev/null +++ b/doc/texi/asn1_read_value_type.texi @@ -0,0 +1,72 @@ +@subheading asn1_read_value_type +@anchor{asn1_read_value_type} +@deftypefun {int} {asn1_read_value_type} (asn1_node @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}, unsigned int * @var{etype}) +@var{root}: pointer to a structure. + +@var{name}: the name of the element inside a structure that you want to read. + +@var{ivalue}: vector that will contain the element's content, must be a +pointer to memory cells already allocated (may be @code{NULL} ). + +@var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy +holds the sizeof value. + +@var{etype}: The type of the value read (ASN1_ETYPE) + +Returns the type and value of one element inside a structure. +If an element is OPTIONAL and this returns +@code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the @code{root} provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. + +Note that there can be valid values with length zero. In these case +this function will succeed and @code{len} will be zero. + +@strong{INTEGER:} VALUE will contain a two's complement form integer. + +integer=-1 -> value[0]=0xFF , len=1. +integer=1 -> value[0]=0x01 , len=1. + +@strong{ENUMERATED:} As INTEGER (but only with not negative numbers). + +@strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. + +OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). + +LEN = strlen(VALUE)+1 + +@strong{UTCTime:} VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". +LEN=strlen(VALUE)+1. + +@strong{GeneralizedTime:} VALUE will be a null terminated string in the +same format used to set the value. + +OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. + +@strong{GeneralString:} VALUE will contain the generalstring and LEN will +be the number of octets. + +BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. + +@strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the +alternative selected. + +@strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. + +@strong{Returns:} @code{ASN1_SUCCESS} if value is returned, +@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, +@code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element +selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough +to store the result, and in this case @code{len} will contain the number of +bytes needed. +@end deftypefun + diff --git a/doc/texi/asn1_strerror.texi b/doc/texi/asn1_strerror.texi new file mode 100644 index 0000000..00207ba --- /dev/null +++ b/doc/texi/asn1_strerror.texi @@ -0,0 +1,15 @@ +@subheading asn1_strerror +@anchor{asn1_strerror} +@deftypefun {const char *} {asn1_strerror} (int @var{error}) +@var{error}: is an error returned by a libtasn1 function. + +Returns a string with a description of an error. This function is +similar to strerror. The only difference is that it accepts an +error (number) returned by a libtasn1 function. + +@strong{Returns:} Pointer to static zero-terminated string describing error +code. + +@strong{Since:} 1.6 +@end deftypefun + diff --git a/doc/texi/asn1_write_value.texi b/doc/texi/asn1_write_value.texi new file mode 100644 index 0000000..52e5093 --- /dev/null +++ b/doc/texi/asn1_write_value.texi @@ -0,0 +1,111 @@ +@subheading asn1_write_value +@anchor{asn1_write_value} +@deftypefun {int} {asn1_write_value} (asn1_node @var{node_root}, const char * @var{name}, const void * @var{ivalue}, int @var{len}) +@var{node_root}: pointer to a structure + +@var{name}: the name of the element inside the structure that you want to set. + +@var{ivalue}: vector used to specify the value to set. If len is >0, +VALUE must be a two's complement form integer. if len=0 *VALUE +must be a null terminated string with an integer value. + +@var{len}: number of bytes of *value to use to set the value: +value[0]..value[len-1] or 0 if value is a null terminated string + +Set the value of one element inside a structure. + +If an element is OPTIONAL and you want to delete it, you must use +the value=NULL and len=0. Using "pkix.asn": + +result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", +NULL, 0); + +Description for each type: + +@strong{INTEGER:} VALUE must contain a two's complement form integer. + +value[0]=0xFF , len=1 -> integer=-1. +value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. +value[0]=0x01 , len=1 -> integer= 1. +value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. +value="123" , len=0 -> integer= 123. + +@strong{ENUMERATED:} As INTEGER (but only with not negative numbers). + +@strong{BOOLEAN:} VALUE must be the null terminated string "TRUE" or +"FALSE" and LEN != 0. + +value="TRUE" , len=1 -> boolean=TRUE. +value="FALSE" , len=1 -> boolean=FALSE. + +OBJECT IDENTIFIER: VALUE must be a null terminated string with +each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. + +value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. + +@strong{UTCTime:} VALUE must be a null terminated string in one of these +formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", +"YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", +"YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. + +value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 +at 12h 00m Greenwich Mean Time + +@strong{GeneralizedTime:} VALUE must be in one of this format: +"YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", +"YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", +"YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s +indicates the seconds with any precision like "10.1" or "01.02". +LEN != 0 + +value="2001010112001.12-0700" , len=1 -> time=Jannuary +1st, 2001 at 12h 00m 01.12s Pacific Daylight Time + +OCTET STRING: VALUE contains the octet string and LEN is the +number of octets. + +value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 -> three bytes octet string + +@strong{GeneralString:} VALUE contains the generalstring and LEN is the +number of octets. + +value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 -> three bytes generalstring + +BIT STRING: VALUE contains the bit string organized by bytes and +LEN is the number of bits. + +value="$\backslash$xCF" , len=6 -> bit string="110011" (six +bits) + +@strong{CHOICE:} if NAME indicates a choice type, VALUE must specify one of +the alternatives with a null terminated string. LEN != 0. Using +"pkix.asn"\: + +result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject", "rdnSequence", +1); + +@strong{ANY:} VALUE indicates the der encoding of a structure. LEN != 0. + +SEQUENCE OF: VALUE must be the null terminated string "NEW" and +LEN != 0. With this instruction another element is appended in +the sequence. The name of this element will be "?1" if it's the +first one, "?2" for the second and so on. + +Using "pkix.asn"\: + +result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); + +SET OF: the same as SEQUENCE OF. Using "pkix.asn": + +result=asn1_write_value(cert, +"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); + +@strong{Returns:} @code{ASN1_SUCCESS} if the value was set, +@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, and +@code{ASN1_VALUE_NOT_VALID} if @code{ivalue} has a wrong format. +@end deftypefun + diff --git a/doc/texi/coding.c.texi b/doc/texi/coding.c.texi new file mode 100644 index 0000000..7ffdb35 --- /dev/null +++ b/doc/texi/coding.c.texi @@ -0,0 +1,111 @@ +@subheading asn1_length_der +@anchor{asn1_length_der} +@deftypefun {void} {asn1_length_der} (unsigned long int @var{len}, unsigned char * @var{der}, int * @var{der_len}) +@var{len}: value to convert. + +@var{der}: buffer to hold the returned encoding (may be @code{NULL} ). + +@var{der_len}: number of meaningful bytes of ANS (der[0]..der[der_len-1]). + +Creates the DER encoding of the provided length value. +The @code{der} buffer must have enough room for the output. The maximum +length this function will encode is @code{ASN1_MAX_LENGTH_SIZE} . + +To know the size of the DER encoding use a @code{NULL} value for @code{der} . +@end deftypefun + +@subheading asn1_octet_der +@anchor{asn1_octet_der} +@deftypefun {void} {asn1_octet_der} (const unsigned char * @var{str}, int @var{str_len}, unsigned char * @var{der}, int * @var{der_len}) +@var{str}: the input data. + +@var{str_len}: STR length (str[0]..str[*str_len-1]). + +@var{der}: encoded string returned. + +@var{der_len}: number of meaningful bytes of DER (der[0]..der[der_len-1]). + +Creates a length-value DER encoding for the input data. +The DER encoding of the input data will be placed in the @code{der} variable. + +Note that the OCTET STRING tag is not included in the output. + +This function does not return any value because it is expected +that @code{der_len} will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +@code{asn1_length_der()} . +@end deftypefun + +@subheading asn1_encode_simple_der +@anchor{asn1_encode_simple_der} +@deftypefun {int} {asn1_encode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{str}, unsigned int @var{str_len}, unsigned char * @var{tl}, unsigned int * @var{tl_len}) +@var{etype}: The type of the string to be encoded (ASN1_ETYPE_) + +@var{str}: the string data. + +@var{str_len}: the string length + +@var{tl}: the encoded tag and length + +@var{tl_len}: the bytes of the @code{tl} field + +Creates the DER encoding for various simple ASN.1 types like strings etc. +It stores the tag and length in @code{tl} , which should have space for at least +@code{ASN1_MAX_TL_SIZE} bytes. Initially @code{tl_len} should contain the size of @code{tl} . + +The complete DER encoding should consist of the value in @code{tl} appended +with the provided @code{str} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. +@end deftypefun + +@subheading asn1_bit_der +@anchor{asn1_bit_der} +@deftypefun {void} {asn1_bit_der} (const unsigned char * @var{str}, int @var{bit_len}, unsigned char * @var{der}, int * @var{der_len}) +@var{str}: BIT string. + +@var{bit_len}: number of meaningful bits in STR. + +@var{der}: string returned. + +@var{der_len}: number of meaningful bytes of DER +(der[0]..der[ans_len-1]). + +Creates a length-value DER encoding for the input data +as it would have been for a BIT STRING. +The DER encoded data will be copied in @code{der} . + +Note that the BIT STRING tag is not included in the output. + +This function does not return any value because it is expected +that @code{der_len} will contain enough bytes to store the string +plus the DER encoding. The DER encoding size can be obtained using +@code{asn1_length_der()} . +@end deftypefun + +@subheading asn1_der_coding +@anchor{asn1_der_coding} +@deftypefun {int} {asn1_der_coding} (asn1_node @var{element}, const char * @var{name}, void * @var{ider}, int * @var{len}, char * @var{ErrorDescription}) +@var{element}: pointer to an ASN1 element + +@var{name}: the name of the structure you want to encode (it must be +inside *POINTER). + +@var{ider}: vector that will contain the DER encoding. DER must be a +pointer to memory cells already allocated. + +@var{len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1], Initialy +holds the sizeof of der vector. + +@var{ErrorDescription}: return the error description or an empty +string if success. + +Creates the DER encoding for the NAME structure (inside *POINTER +structure). + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there +is an element without a value, @code{ASN1_MEM_ERROR} if the @code{ider} vector isn't big enough and in this case @code{len} will contain the +length needed. +@end deftypefun + diff --git a/doc/texi/decoding.c.texi b/doc/texi/decoding.c.texi new file mode 100644 index 0000000..7c04d30 --- /dev/null +++ b/doc/texi/decoding.c.texi @@ -0,0 +1,316 @@ +@subheading asn1_get_length_der +@anchor{asn1_get_length_der} +@deftypefun {long} {asn1_get_length_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{len}) +@var{der}: DER data to decode. + +@var{der_len}: Length of DER data to decode. + +@var{len}: Output variable containing the length of the DER length field. + +Extract a length field from DER data. + +@strong{Returns:} Return the decoded length value, or -1 on indefinite +length, or -2 when the value was too big to fit in a int, or -4 +when the decoded length value plus @code{len} would exceed @code{der_len} . +@end deftypefun + +@subheading asn1_get_tag_der +@anchor{asn1_get_tag_der} +@deftypefun {int} {asn1_get_tag_der} (const unsigned char * @var{der}, int @var{der_len}, unsigned char * @var{cls}, int * @var{len}, unsigned long * @var{tag}) +@var{der}: DER data to decode. + +@var{der_len}: Length of DER data to decode. + +@var{cls}: Output variable containing decoded class. + +@var{len}: Output variable containing the length of the DER TAG data. + +@var{tag}: Output variable containing the decoded tag. + +Decode the class and TAG from DER code. + +@strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + +@subheading asn1_get_length_ber +@anchor{asn1_get_length_ber} +@deftypefun {long} {asn1_get_length_ber} (const unsigned char * @var{ber}, int @var{ber_len}, int * @var{len}) +@var{ber}: BER data to decode. + +@var{ber_len}: Length of BER data to decode. + +@var{len}: Output variable containing the length of the BER length field. + +Extract a length field from BER data. The difference to +@code{asn1_get_length_der()} is that this function will return a length +even if the value has indefinite encoding. + +@strong{Returns:} Return the decoded length value, or negative value when +the value was too big. + +@strong{Since:} 2.0 +@end deftypefun + +@subheading asn1_get_octet_der +@anchor{asn1_get_octet_der} +@deftypefun {int} {asn1_get_octet_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{str_len}) +@var{der}: DER data to decode containing the OCTET SEQUENCE. + +@var{der_len}: Length of DER data to decode. + +@var{ret_len}: Output variable containing the length of the DER data. + +@var{str}: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. + +@var{str_size}: Length of pre-allocated output buffer. + +@var{str_len}: Output variable containing the length of the OCTET SEQUENCE. + +Extract an OCTET SEQUENCE from DER data. + +@strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + +@subheading asn1_get_object_id_der +@anchor{asn1_get_object_id_der} +@deftypefun {int} {asn1_get_object_id_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, char * @var{str}, int @var{str_size}) +@var{der}: DER data to decode containing the OBJECT IDENTIFIER + +@var{der_len}: Length of DER data to decode. + +@var{ret_len}: Output variable containing the length of the DER data. + +@var{str}: Pre-allocated output buffer to put the textual object id in. + +@var{str_size}: Length of pre-allocated output buffer. + +Converts a DER encoded object identifier to its textual form. + +@strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + +@subheading asn1_get_bit_der +@anchor{asn1_get_bit_der} +@deftypefun {int} {asn1_get_bit_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{bit_len}) +@var{der}: DER data to decode containing the BIT SEQUENCE. + +@var{der_len}: Length of DER data to decode. + +@var{ret_len}: Output variable containing the length of the DER data. + +@var{str}: Pre-allocated output buffer to put decoded BIT SEQUENCE in. + +@var{str_size}: Length of pre-allocated output buffer. + +@var{bit_len}: Output variable containing the size of the BIT SEQUENCE. + +Extract a BIT SEQUENCE from DER data. + +@strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. +@end deftypefun + +@subheading asn1_der_decoding2 +@anchor{asn1_der_decoding2} +@deftypefun {int} {asn1_der_decoding2} (asn1_node * @var{element}, const void * @var{ider}, int * @var{max_ider_len}, unsigned int @var{flags}, char * @var{errorDescription}) +@var{element}: pointer to an ASN1 structure. + +@var{ider}: vector that contains the DER encoding. + +@var{max_ider_len}: pointer to an integer giving the information about the +maximal number of bytes occupied by * @code{ider} . The real size of the DER +encoding is returned through this pointer. + +@var{flags}: flags controlling the behaviour of the function. + +@var{errorDescription}: null-terminated string contains details when an +error occurred. + +Fill the structure * @code{element} with values of a DER encoding string. The +structure must just be created with function @code{asn1_create_element()} . + +If @code{ASN1_DECODE_FLAG_ALLOW_PADDING} flag is set then the function will ignore +padding after the decoded DER data. Upon a successful return the value of +* @code{max_ider_len} will be set to the number of bytes decoded. + +If @code{ASN1_DECODE_FLAG_STRICT_DER} flag is set then the function will +not decode any BER-encoded elements. + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or +@code{ASN1_DER_ERROR} if the der encoding doesn't match the structure +name (* @code{ELEMENT} deleted). +@end deftypefun + +@subheading asn1_der_decoding +@anchor{asn1_der_decoding} +@deftypefun {int} {asn1_der_decoding} (asn1_node * @var{element}, const void * @var{ider}, int @var{ider_len}, char * @var{errorDescription}) +@var{element}: pointer to an ASN1 structure. + +@var{ider}: vector that contains the DER encoding. + +@var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1]. + +@var{errorDescription}: null-terminated string contains details when an +error occurred. + +Fill the structure * @code{element} with values of a DER encoding +string. The structure must just be created with function +@code{asn1_create_element()} . + +Note that the * @code{element} variable is provided as a pointer for +historical reasons. + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or +@code{ASN1_DER_ERROR} if the der encoding doesn't match the structure +name (* @code{ELEMENT} deleted). +@end deftypefun + +@subheading asn1_der_decoding_element +@anchor{asn1_der_decoding_element} +@deftypefun {int} {asn1_der_decoding_element} (asn1_node * @var{structure}, const char * @var{elementName}, const void * @var{ider}, int @var{len}, char * @var{errorDescription}) +@var{structure}: pointer to an ASN1 structure + +@var{elementName}: name of the element to fill + +@var{ider}: vector that contains the DER encoding of the whole structure. + +@var{len}: number of bytes of *der: der[0]..der[len-1] + +@var{errorDescription}: null-terminated string contains details when an +error occurred. + +Fill the element named @code{ELEMENTNAME} with values of a DER encoding +string. The structure must just be created with function +@code{asn1_create_element()} . The DER vector must contain the encoding +string of the whole @code{STRUCTURE} . If an error occurs during the +decoding procedure, the * @code{STRUCTURE} is deleted and set equal to +@code{NULL} . + +This function is deprecated and may just be an alias to asn1_der_decoding +in future versions. Use @code{asn1_der_decoding()} instead. + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if ELEMENT is @code{NULL} or @code{elementName} == NULL, and +@code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't +match the structure @code{structure} (*ELEMENT deleted). +@end deftypefun + +@subheading asn1_der_decoding_startEnd +@anchor{asn1_der_decoding_startEnd} +@deftypefun {int} {asn1_der_decoding_startEnd} (asn1_node @var{element}, const void * @var{ider}, int @var{ider_len}, const char * @var{name_element}, int * @var{start}, int * @var{end}) +@var{element}: pointer to an ASN1 element + +@var{ider}: vector that contains the DER encoding. + +@var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1] + +@var{name_element}: an element of NAME structure. + +@var{start}: the position of the first byte of NAME_ELEMENT decoding +( @code{ider} [*start]) + +@var{end}: the position of the last byte of NAME_ELEMENT decoding +( @code{ider} [*end]) + +Find the start and end point of an element in a DER encoding +string. I mean that if you have a der encoding and you have already +used the function @code{asn1_der_decoding()} to fill a structure, it may +happen that you want to find the piece of string concerning an +element of the structure. + +One example is the sequence "tbsCertificate" inside an X509 +certificate. + +Note that since libtasn1 3.7 the @code{ider} and @code{ider_len} parameters +can be omitted, if the element is already decoded using @code{asn1_der_decoding()} . + +@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} +if ELEMENT is @code{asn1_node} EMPTY or @code{name_element} is not a valid +element, @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding +doesn't match the structure ELEMENT. +@end deftypefun + +@subheading asn1_expand_any_defined_by +@anchor{asn1_expand_any_defined_by} +@deftypefun {int} {asn1_expand_any_defined_by} (asn1_node @var{definitions}, asn1_node * @var{element}) +@var{definitions}: ASN1 definitions + +@var{element}: pointer to an ASN1 structure + +Expands every "ANY DEFINED BY" element of a structure created from +a DER decoding process (asn1_der_decoding function). The element +ANY must be defined by an OBJECT IDENTIFIER. The type used to +expand the element ANY is the first one following the definition of +the actual value of the OBJECT IDENTIFIER. + +@strong{Returns:} @code{ASN1_SUCCESS} if Substitution OK, @code{ASN1_ERROR_TYPE_ANY} if +some "ANY DEFINED BY" element couldn't be expanded due to a +problem in OBJECT_ID -> TYPE association, or other error codes +depending on DER decoding. +@end deftypefun + +@subheading asn1_expand_octet_string +@anchor{asn1_expand_octet_string} +@deftypefun {int} {asn1_expand_octet_string} (asn1_node @var{definitions}, asn1_node * @var{element}, const char * @var{octetName}, const char * @var{objectName}) +@var{definitions}: ASN1 definitions + +@var{element}: pointer to an ASN1 structure + +@var{octetName}: name of the OCTECT STRING field to expand. + +@var{objectName}: name of the OBJECT IDENTIFIER field to use to define +the type for expansion. + +Expands an "OCTET STRING" element of a structure created from a DER +decoding process (the @code{asn1_der_decoding()} function). The type used +for expansion is the first one following the definition of the +actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. + +@strong{Returns:} @code{ASN1_SUCCESS} if substitution OK, @code{ASN1_ELEMENT_NOT_FOUND} +if @code{objectName} or @code{octetName} are not correct, +@code{ASN1_VALUE_NOT_VALID} if it wasn't possible to find the type to +use for expansion, or other errors depending on DER decoding. +@end deftypefun + +@subheading asn1_decode_simple_der +@anchor{asn1_decode_simple_der} +@deftypefun {int} {asn1_decode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, const unsigned char ** @var{str}, unsigned int * @var{str_len}) +@var{etype}: The type of the string to be encoded (ASN1_ETYPE_) + +@var{der}: the encoded string + +@var{_der_len}: the bytes of the encoded string + +@var{str}: a pointer to the data + +@var{str_len}: the length of the data + +Decodes a simple DER encoded type (e.g. a string, which is not constructed). +The output is a pointer inside the @code{der} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. +@end deftypefun + +@subheading asn1_decode_simple_ber +@anchor{asn1_decode_simple_ber} +@deftypefun {int} {asn1_decode_simple_ber} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, unsigned char ** @var{str}, unsigned int * @var{str_len}, unsigned int * @var{ber_len}) +@var{etype}: The type of the string to be encoded (ASN1_ETYPE_) + +@var{der}: the encoded string + +@var{_der_len}: the bytes of the encoded string + +@var{str}: a pointer to the data + +@var{str_len}: the length of the data + +@var{ber_len}: the total length occupied by BER (may be @code{NULL} ) + +Decodes a BER encoded type. The output is an allocated value +of the data. This decodes BER STRINGS only. Other types are +decoded as DER. + +@strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. +@end deftypefun + diff --git a/doc/texi/element.c.texi b/doc/texi/element.c.texi new file mode 100644 index 0000000..6e40405 --- /dev/null +++ b/doc/texi/element.c.texi @@ -0,0 +1,286 @@ +@subheading asn1_write_value +@anchor{asn1_write_value} +@deftypefun {int} {asn1_write_value} (asn1_node @var{node_root}, const char * @var{name}, const void * @var{ivalue}, int @var{len}) +@var{node_root}: pointer to a structure + +@var{name}: the name of the element inside the structure that you want to set. + +@var{ivalue}: vector used to specify the value to set. If len is >0, +VALUE must be a two's complement form integer. if len=0 *VALUE +must be a null terminated string with an integer value. + +@var{len}: number of bytes of *value to use to set the value: +value[0]..value[len-1] or 0 if value is a null terminated string + +Set the value of one element inside a structure. + +If an element is OPTIONAL and you want to delete it, you must use +the value=NULL and len=0. Using "pkix.asn": + +result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", +NULL, 0); + +Description for each type: + +@strong{INTEGER:} VALUE must contain a two's complement form integer. + +value[0]=0xFF , len=1 -> integer=-1. +value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. +value[0]=0x01 , len=1 -> integer= 1. +value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. +value="123" , len=0 -> integer= 123. + +@strong{ENUMERATED:} As INTEGER (but only with not negative numbers). + +@strong{BOOLEAN:} VALUE must be the null terminated string "TRUE" or +"FALSE" and LEN != 0. + +value="TRUE" , len=1 -> boolean=TRUE. +value="FALSE" , len=1 -> boolean=FALSE. + +OBJECT IDENTIFIER: VALUE must be a null terminated string with +each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. + +value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. + +@strong{UTCTime:} VALUE must be a null terminated string in one of these +formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", +"YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", +"YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. + +value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 +at 12h 00m Greenwich Mean Time + +@strong{GeneralizedTime:} VALUE must be in one of this format: +"YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", +"YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", +"YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s +indicates the seconds with any precision like "10.1" or "01.02". +LEN != 0 + +value="2001010112001.12-0700" , len=1 -> time=Jannuary +1st, 2001 at 12h 00m 01.12s Pacific Daylight Time + +OCTET STRING: VALUE contains the octet string and LEN is the +number of octets. + +value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 -> three bytes octet string + +@strong{GeneralString:} VALUE contains the generalstring and LEN is the +number of octets. + +value="$\backslash$x01$\backslash$x02$\backslash$x03" , +len=3 -> three bytes generalstring + +BIT STRING: VALUE contains the bit string organized by bytes and +LEN is the number of bits. + +value="$\backslash$xCF" , len=6 -> bit string="110011" (six +bits) + +@strong{CHOICE:} if NAME indicates a choice type, VALUE must specify one of +the alternatives with a null terminated string. LEN != 0. Using +"pkix.asn"\: + +result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject", "rdnSequence", +1); + +@strong{ANY:} VALUE indicates the der encoding of a structure. LEN != 0. + +SEQUENCE OF: VALUE must be the null terminated string "NEW" and +LEN != 0. With this instruction another element is appended in +the sequence. The name of this element will be "?1" if it's the +first one, "?2" for the second and so on. + +Using "pkix.asn"\: + +result=asn1_write_value(cert, +"certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); + +SET OF: the same as SEQUENCE OF. Using "pkix.asn": + +result=asn1_write_value(cert, +"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); + +@strong{Returns:} @code{ASN1_SUCCESS} if the value was set, +@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, and +@code{ASN1_VALUE_NOT_VALID} if @code{ivalue} has a wrong format. +@end deftypefun + +@subheading asn1_read_value +@anchor{asn1_read_value} +@deftypefun {int} {asn1_read_value} (asn1_node @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}) +@var{root}: pointer to a structure. + +@var{name}: the name of the element inside a structure that you want to read. + +@var{ivalue}: vector that will contain the element's content, must be a +pointer to memory cells already allocated (may be @code{NULL} ). + +@var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy +holds the sizeof value. + +Returns the value of one element inside a structure. +If an element is OPTIONAL and this returns +@code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the @code{root} provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. + +Note that there can be valid values with length zero. In these case +this function will succeed and @code{len} will be zero. + +@strong{INTEGER:} VALUE will contain a two's complement form integer. + +integer=-1 -> value[0]=0xFF , len=1. +integer=1 -> value[0]=0x01 , len=1. + +@strong{ENUMERATED:} As INTEGER (but only with not negative numbers). + +@strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. + +OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). + +LEN = strlen(VALUE)+1 + +@strong{UTCTime:} VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". +LEN=strlen(VALUE)+1. + +@strong{GeneralizedTime:} VALUE will be a null terminated string in the +same format used to set the value. + +OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. + +@strong{GeneralString:} VALUE will contain the generalstring and LEN will +be the number of octets. + +BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. + +@strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the +alternative selected. + +@strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. + +@strong{Returns:} @code{ASN1_SUCCESS} if value is returned, +@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, +@code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element +selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough +to store the result, and in this case @code{len} will contain the number of +bytes needed. +@end deftypefun + +@subheading asn1_read_value_type +@anchor{asn1_read_value_type} +@deftypefun {int} {asn1_read_value_type} (asn1_node @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}, unsigned int * @var{etype}) +@var{root}: pointer to a structure. + +@var{name}: the name of the element inside a structure that you want to read. + +@var{ivalue}: vector that will contain the element's content, must be a +pointer to memory cells already allocated (may be @code{NULL} ). + +@var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy +holds the sizeof value. + +@var{etype}: The type of the value read (ASN1_ETYPE) + +Returns the type and value of one element inside a structure. +If an element is OPTIONAL and this returns +@code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present +in the der encoding that created the structure. The first element +of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and +so on. If the @code{root} provided is a node to specific sequence element, +then the keyword "?CURRENT" is also acceptable and indicates the +current sequence element of this node. + +Note that there can be valid values with length zero. In these case +this function will succeed and @code{len} will be zero. + +@strong{INTEGER:} VALUE will contain a two's complement form integer. + +integer=-1 -> value[0]=0xFF , len=1. +integer=1 -> value[0]=0x01 , len=1. + +@strong{ENUMERATED:} As INTEGER (but only with not negative numbers). + +@strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or +"FALSE" and LEN=5 or LEN=6. + +OBJECT IDENTIFIER: VALUE will be a null terminated string with +each number separated by a dot (i.e. "1.2.3.543.1"). + +LEN = strlen(VALUE)+1 + +@strong{UTCTime:} VALUE will be a null terminated string in one of these +formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". +LEN=strlen(VALUE)+1. + +@strong{GeneralizedTime:} VALUE will be a null terminated string in the +same format used to set the value. + +OCTET STRING: VALUE will contain the octet string and LEN will be +the number of octets. + +@strong{GeneralString:} VALUE will contain the generalstring and LEN will +be the number of octets. + +BIT STRING: VALUE will contain the bit string organized by bytes +and LEN will be the number of bits. + +@strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the +alternative selected. + +@strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER +encoding of the structure actually used. + +@strong{Returns:} @code{ASN1_SUCCESS} if value is returned, +@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, +@code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element +selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough +to store the result, and in this case @code{len} will contain the number of +bytes needed. +@end deftypefun + +@subheading asn1_read_tag +@anchor{asn1_read_tag} +@deftypefun {int} {asn1_read_tag} (asn1_node @var{root}, const char * @var{name}, int * @var{tagValue}, int * @var{classValue}) +@var{root}: pointer to a structure + +@var{name}: the name of the element inside a structure. + +@var{tagValue}: variable that will contain the TAG value. + +@var{classValue}: variable that will specify the TAG type. + +Returns the TAG and the CLASS of one element inside a structure. +CLASS can have one of these constants: @code{ASN1_CLASS_APPLICATION} , +@code{ASN1_CLASS_UNIVERSAL} , @code{ASN1_CLASS_PRIVATE} or +@code{ASN1_CLASS_CONTEXT_SPECIFIC} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if + @code{name} is not a valid element. +@end deftypefun + +@subheading asn1_read_node_value +@anchor{asn1_read_node_value} +@deftypefun {int} {asn1_read_node_value} (asn1_node @var{node}, asn1_data_node_st * @var{data}) +@var{node}: pointer to a node. + +@var{data}: a point to a asn1_data_node_st + +Returns the value a data node inside a asn1_node structure. +The data returned should be handled as constant values. + +@strong{Returns:} @code{ASN1_SUCCESS} if the node exists. +@end deftypefun + diff --git a/doc/texi/errors.c.texi b/doc/texi/errors.c.texi new file mode 100644 index 0000000..718e51b --- /dev/null +++ b/doc/texi/errors.c.texi @@ -0,0 +1,27 @@ +@subheading asn1_perror +@anchor{asn1_perror} +@deftypefun {void} {asn1_perror} (int @var{error}) +@var{error}: is an error returned by a libtasn1 function. + +Prints a string to stderr with a description of an error. This +function is like @code{perror()} . The only difference is that it accepts +an error returned by a libtasn1 function. + +@strong{Since:} 1.6 +@end deftypefun + +@subheading asn1_strerror +@anchor{asn1_strerror} +@deftypefun {const char *} {asn1_strerror} (int @var{error}) +@var{error}: is an error returned by a libtasn1 function. + +Returns a string with a description of an error. This function is +similar to strerror. The only difference is that it accepts an +error (number) returned by a libtasn1 function. + +@strong{Returns:} Pointer to static zero-terminated string describing error +code. + +@strong{Since:} 1.6 +@end deftypefun + diff --git a/doc/texi/gstr.c.texi b/doc/texi/gstr.c.texi new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/doc/texi/gstr.c.texi diff --git a/doc/texi/parser_aux.c.texi b/doc/texi/parser_aux.c.texi new file mode 100644 index 0000000..e5be7c4 --- /dev/null +++ b/doc/texi/parser_aux.c.texi @@ -0,0 +1,15 @@ +@subheading asn1_find_node +@anchor{asn1_find_node} +@deftypefun {asn1_node} {asn1_find_node} (asn1_node @var{pointer}, const char * @var{name}) +@var{pointer}: NODE_ASN element pointer. + +@var{name}: null terminated string with the element's name to find. + +Searches for an element called @code{name} starting from @code{pointer} . The +name is composed by differents identifiers separated by dots. When +* @code{pointer} has a name, the first identifier must be the name of +* @code{pointer} , otherwise it must be the name of one child of * @code{pointer} . + +@strong{Returns:} the search result, or @code{NULL} if not found. +@end deftypefun + diff --git a/doc/texi/structure.c.texi b/doc/texi/structure.c.texi new file mode 100644 index 0000000..fd3f6c8 --- /dev/null +++ b/doc/texi/structure.c.texi @@ -0,0 +1,156 @@ +@subheading asn1_array2tree +@anchor{asn1_array2tree} +@deftypefun {int} {asn1_array2tree} (const asn1_static_node * @var{array}, asn1_node * @var{definitions}, char * @var{errorDescription}) +@var{array}: specify the array that contains ASN.1 declarations + +@var{definitions}: return the pointer to the structure created by +*ARRAY ASN.1 declarations + +@var{errorDescription}: return the error description. + +Creates the structures needed to manage the ASN.1 definitions. + @code{array} is a vector created by @code{asn1_parser2array()} . + +@strong{Returns:} @code{ASN1_SUCCESS} if structure was created correctly, +@code{ASN1_ELEMENT_NOT_EMPTY} if * @code{definitions} not NULL, +@code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier +that is not defined (see @code{errorDescription} for more information), +@code{ASN1_ARRAY_ERROR} if the array pointed by @code{array} is wrong. +@end deftypefun + +@subheading asn1_delete_structure +@anchor{asn1_delete_structure} +@deftypefun {int} {asn1_delete_structure} (asn1_node * @var{structure}) +@var{structure}: pointer to the structure that you want to delete. + +Deletes the structure * @code{structure} . At the end, * @code{structure} is set +to NULL. + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if +* @code{structure} was NULL. +@end deftypefun + +@subheading asn1_delete_structure2 +@anchor{asn1_delete_structure2} +@deftypefun {int} {asn1_delete_structure2} (asn1_node * @var{structure}, unsigned int @var{flags}) +@var{structure}: pointer to the structure that you want to delete. + +@var{flags}: additional flags (see @code{ASN1_DELETE_FLAG} ) + +Deletes the structure * @code{structure} . At the end, * @code{structure} is set +to NULL. + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if +* @code{structure} was NULL. +@end deftypefun + +@subheading asn1_delete_element +@anchor{asn1_delete_element} +@deftypefun {int} {asn1_delete_element} (asn1_node @var{structure}, const char * @var{element_name}) +@var{structure}: pointer to the structure that contains the element you +want to delete. + +@var{element_name}: element's name you want to delete. + +Deletes the element named * @code{element_name} inside * @code{structure} . + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if +the @code{element_name} was not found. +@end deftypefun + +@subheading asn1_create_element +@anchor{asn1_create_element} +@deftypefun {int} {asn1_create_element} (asn1_node @var{definitions}, const char * @var{source_name}, asn1_node * @var{element}) +@var{definitions}: pointer to the structure returned by "parser_asn1" function + +@var{source_name}: the name of the type of the new structure (must be +inside p_structure). + +@var{element}: pointer to the structure created. + +Creates a structure of type @code{source_name} . Example using +"pkix.asn": + +rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); + +@strong{Returns:} @code{ASN1_SUCCESS} if creation OK, @code{ASN1_ELEMENT_NOT_FOUND} if + @code{source_name} is not known. +@end deftypefun + +@subheading asn1_print_structure +@anchor{asn1_print_structure} +@deftypefun {void} {asn1_print_structure} (FILE * @var{out}, asn1_node @var{structure}, const char * @var{name}, int @var{mode}) +@var{out}: pointer to the output file (e.g. stdout). + +@var{structure}: pointer to the structure that you want to visit. + +@var{name}: an element of the structure + +@var{mode}: specify how much of the structure to print, can be +@code{ASN1_PRINT_NAME} , @code{ASN1_PRINT_NAME_TYPE} , +@code{ASN1_PRINT_NAME_TYPE_VALUE} , or @code{ASN1_PRINT_ALL} . + +Prints on the @code{out} file descriptor the structure's tree starting +from the @code{name} element inside the structure @code{structure} . +@end deftypefun + +@subheading asn1_number_of_elements +@anchor{asn1_number_of_elements} +@deftypefun {int} {asn1_number_of_elements} (asn1_node @var{element}, const char * @var{name}, int * @var{num}) +@var{element}: pointer to the root of an ASN1 structure. + +@var{name}: the name of a sub-structure of ROOT. + +@var{num}: pointer to an integer where the result will be stored + +Counts the number of elements of a sub-structure called NAME with +names equal to "?1","?2", ... + +@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if + @code{name} is not known, @code{ASN1_GENERIC_ERROR} if pointer @code{num} is @code{NULL} . +@end deftypefun + +@subheading asn1_find_structure_from_oid +@anchor{asn1_find_structure_from_oid} +@deftypefun {const char *} {asn1_find_structure_from_oid} (asn1_node @var{definitions}, const char * @var{oidValue}) +@var{definitions}: ASN1 definitions + +@var{oidValue}: value of the OID to search (e.g. "1.2.3.4"). + +Search the structure that is defined just after an OID definition. + +@strong{Returns:} @code{NULL} when @code{oidValue} not found, otherwise the pointer to a +constant string that contains the element name defined just after +the OID. +@end deftypefun + +@subheading asn1_copy_node +@anchor{asn1_copy_node} +@deftypefun {int} {asn1_copy_node} (asn1_node @var{dst}, const char * @var{dst_name}, asn1_node @var{src}, const char * @var{src_name}) +@var{dst}: Destination asn1 node. + +@var{dst_name}: Field name in destination node. + +@var{src}: Source asn1 node. + +@var{src_name}: Field name in source node. + +Create a deep copy of a asn1_node variable. That +function requires @code{dst} to be expanded using @code{asn1_create_element()} . + +@strong{Returns:} Return @code{ASN1_SUCCESS} on success. +@end deftypefun + +@subheading asn1_dup_node +@anchor{asn1_dup_node} +@deftypefun {asn1_node} {asn1_dup_node} (asn1_node @var{src}, const char * @var{src_name}) +@var{src}: Source asn1 node. + +@var{src_name}: Field name in source node. + +Create a deep copy of a asn1_node variable. This function +will return an exact copy of the provided structure. + +@strong{Returns:} Return @code{NULL} on failure. +@end deftypefun + diff --git a/doc/texi/version.c.texi b/doc/texi/version.c.texi new file mode 100644 index 0000000..b7495b6 --- /dev/null +++ b/doc/texi/version.c.texi @@ -0,0 +1,16 @@ +@subheading asn1_check_version +@anchor{asn1_check_version} +@deftypefun {const char *} {asn1_check_version} (const char * @var{req_version}) +@var{req_version}: Required version number, or @code{NULL} . + +Check that the version of the library is at minimum the +requested one and return the version string; return @code{NULL} if the +condition is not satisfied. If a @code{NULL} is passed to this function, +no check is done, but the version string is simply returned. + +See @code{ASN1_VERSION} for a suitable @code{req_version} string. + +@strong{Returns:} Version string of run-time library, or @code{NULL} if the +run-time library does not meet the required version number. +@end deftypefun + diff --git a/doc/version.texi b/doc/version.texi new file mode 100644 index 0000000..b76228e --- /dev/null +++ b/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 4 April 2016 +@set UPDATED-MONTH April 2016 +@set EDITION 4.8 +@set VERSION 4.8 |